vector相关OJ题LeetCode(下)

一、电话号码的字母组合

1.1 题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
vector相关OJ题LeetCode(下)
示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

1.2 解题思路
vector相关OJ题LeetCode(下)
1.3 代码实现

    string  letter_map[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
class Solution {
public:
        void  _letterCombinations(vector<string>& vcombin,const string& digits,size_t index,string combinstr)
           {
                if(index == digits.size())//递归结束条件
                {
                      vcombin.push_back(combinstr);//将组合好的字符串放到创建的vector中
                      return;
                }
                
                string letters = letter_map(digits[index] - '0');//取得数字对应的字符串
                //从第一个字符串开始,取每一个字符递归与后面字符组合
                for(size_t i; i < letters.size();++i)
                {
                      _letterCombinations(vcombin,digits,index+1,combinstr+letters[i]);
                }
            }
         vector<string> letterCombinations(string digits) {
                    vector<string> v;
                    if(digits.empty())
                           return v;
                    string str;//定义一个字符串记录组合字符
                    size_t index;//定义下标,标记访问到哪一个数字
                 
                    _letterCombinations(v,digits,index,str);
                    return v;

       }
 };

二、杨辉三角

1.1 题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例:

输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

1.2 解题思路
vector相关OJ题LeetCode(下)
1.3 代码实现

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv;//相当于创建了一个二维数组,一个vector里面存着一个vector
        
        vv.resize(numRows);//为第一个vector开空间
        
        for(size_t i = 0;i < vv.size();++i)
        {
            vv[i].resize(i+1,0);//为存在vv中的vector开辟空间,并把所有值置成0
            vv[i][0] = 1;
            vv[i][vv[i].size() - 1] = 1;  
        }
        
        //重新遍历一遍vector,找到为0的位置
        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] = vv[i-1][j-1] + vv[i-1][j];
                }
            }
        } 
        return vv;
    }

};