vector 练习

目录

一、创建动态二维数组的方法

        0x01 C语言法

        0x02  C++法

二、 杨辉三角

三、电话号码的数字组合


一、创建动态二维数组的方法

vector 练习_第1张图片

        0x01 C语言法

int** p = (int**)malloc(sizeof(int*) * M);//创建M行的数组,每一行都是一个数组
for(size_t i = 0;i < M;i++)
{
	p[i] = (int*)malloc(sizeof(int) * N);//每一行有N列
}

        0x02  C++法

vector> arr;
//解析:vector相当于一个数组,里面再放个vector,相当于如每一格里面还有一个数组,图可用上图参考

二、 杨辉三角

力扣icon-default.png?t=N4P3https://leetcode.cn/problems/pascals-triangle/submissions/ 思路:使用二维数组,进行开空间和初始化,然后通过规律可知,每个为0的空,等于上一行与本行当前下标相同的那一个加上前一个

class Solution {
public:
    vector> generate(int numRows) 
    {
        //创建一个二维数组
        vector> arr;
        //创建行数
        arr.resize(numRows);
        //进行初始化给值,并且每行里面多少个数
        for(size_t i = 0;i < numRows;i++)
        {
            //先给每行里面的数组进行开空间
            arr[i].resize(i+1);
            //第一个数和最后一个数初始化为1
            arr[i].front() = arr[i].back() = 1;
        }
        //其余的每一个初始化为0的空,都等于上一行的当前下标的数+前一个数
        for(size_t i = 0;i < numRows;i++)
        {
            for(size_t j = 0;j < arr[i].size();j++)
            {
                if(arr[i][j] == 0)
                {
                    arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
                }
            }
        }
        return arr;
    }
};

辅助理解图:

vector 练习_第2张图片

三、电话号码的数字组合

力扣icon-default.png?t=N4P3https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 思路:首先初始化数组,然后可以通过下图的递归展开图来理解

class Solution 
{
    string arr[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:
    void _letterCombinations(const string& digits,size_t i,string combine_str,vector& vs)
    {
        if(i == digits.size())
        {
            vs.push_back(combine_str);
            return;
        }
        string str = arr[digits[i] - '0'];//def
        for(size_t j = 0;j < str.size();j++)
        {
            _letterCombinations(digits,i+1,combine_str+str[j],vs);
        }
    }
    vector letterCombinations(string digits) 
    {
        //组合后的字符串
        string combine_str;
        //最终的字符串数组
        vector vs;
        if(digits.empty())
        {
            return vs;
        }
        //进行组合
        _letterCombinations(digits,0,combine_str,vs);//"369" , 3 6 9是i=0 1 2
        return vs;
    }
};

辅助理解递归图:

vector 练习_第3张图片

 本文为学习时的一些练习,如有问题还请各位大佬多多指导。

你可能感兴趣的:(【和伙伴一起学C++】,c++)