一、杨辉三角
解答:
class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; //vv里面一共有numRows行 vv.resize(numRows); for(size_t i=0;i<vv.size();i++){ //第i行进行初始化 vv[i].resize(i+1,0); //第一个和最后一个初始化为1; vv[i][0]=1; vv[i][vv[i].size()-1]=1; } for(size_t i = 0; i < vv.size(); i++){ for(size_t j = 0; j < vv[i].size(); j++){ if(vv[i][j]==0){ //vv[i][j]为上一行的j和j-1两相加 vv[i][j]=vv[i-1][j]+vv[i-1][j-1]; } } } return vv; } };
二、数字组合
解答:
class Solution { string _numsToStr[10]={"","","abc","def","ghi","jkl","mno","qprs","tuv","wxyz"}; public: //di:表示digits中对应的数字,通过di来找字符串;combiner:表示组合的字符串; //retV:组合好的combiner放在retV里面 void _letterCombine(string digits,size_t di,string combineStr,vector<string>& retV){ //当di==digits.size()的时候,表示完成组合 //将combiner传给retV中。 if(di==digits.size()){ retV.push_back(combineStr); return; } //num:表示取到第几个数字(转换成字符数字) int num =digits[di]-'0'; //str:表示拿到_numsToStr中第num个字符串 string str=_numsToStr[num]; //从str中挑数据与另一个str进行组合 for(auto x:str){ //combineStr += x; //x会拿到str中的每一个字符;通过递归改变di(即di+1,拿到下一个)以拿到不同的字符串 _letterCombine(digits,di+1,combineStr+x,retV); } } vector<string> letterCombinations(string digits) { //存放组合的结果: vector<string> retV; //没有输入数字:直接返回 if(digits.empty()) return retV; size_t i=0; string str; _letterCombine(digits,i,str,retV); return retV; } };