目录
一、创建动态二维数组的方法
0x01 C语言法
0x02 C++法
二、 杨辉三角
三、电话号码的数字组合
一、创建动态二维数组的方法
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<vector<int>> arr;
//解析:vector相当于一个数组,里面再放个vector<int>,相当于如每一格里面还有一个数组,图可用上图参考
二、 杨辉三角
力扣https://leetcode.cn/problems/pascals-triangle/submissions/ 思路:使用二维数组,进行开空间和初始化,然后通过规律可知,每个为0的空,等于上一行与本行当前下标相同的那一个加上前一个
class Solution {
public:vector<vector<int>> generate(int numRows) {//创建一个二维数组vector<vector<int>> arr;//创建行数arr.resize(numRows);//进行初始化给值,并且每行里面多少个数for(size_t i = 0;i < numRows;i++){//先给每行里面的数组进行开空间arr[i].resize(i+1);//第一个数和最后一个数初始化为1arr[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;}
};
辅助理解图:
三、电话号码的数字组合
力扣https://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<string>& vs){if(i == digits.size()){vs.push_back(combine_str);return;}string str = arr[digits[i] - '0'];//deffor(size_t j = 0;j < str.size();j++){_letterCombinations(digits,i+1,combine_str+str[j],vs);}}vector<string> letterCombinations(string digits) {//组合后的字符串string combine_str;//最终的字符串数组vector<string> vs;if(digits.empty()){return vs;}//进行组合_letterCombinations(digits,0,combine_str,vs);//"369" , 3 6 9是i=0 1 2return vs;}
};
辅助理解递归图:
本文为学习时的一些练习,如有问题还请各位大佬多多指导。