• leetCode Letter Combinations of a Phone Number


    方法一:

    • 从digits 的第一字符开始遍历
    • 每次结果都是在之前的结果的基础上,加上当前数字可能的情况: 所以使用一个vector<string> result 存储每次加的结果;最开始为"";
    • 创建一个当前的结果vector<string> temp:要遍历result中的每一个并且遍历当前字符的所有可能,组成新的字符串,加入result vector 中
    class Solution {
    public:
    
        vector<string> letterCombinations(string digits) {
    
    
            vector<string> d={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
            vector<string> result;
            if(digits.size()==0)
                return result;
            result.push_back("");
            int k=digits.size();
            
            for(int i=0;i<k;i++)
            {
                int c=digits[i]-'0';
                if(c<0||c>9) break;
                cout<<c<<endl;
                vector<string>temp;
               for(int j=0;j<d[c].length();j++)
                {
                   for(int m=0;m<result.size();m++)
                   {
                      cout<<d[c][j]<<endl;
                      temp.push_back(result[m]+d[c][j]); 
                   }
    
                }    
                result=temp;
                
                
                
            }
            return result;
    
    
        }
    };
    

      

    方法二:

    这道题类似之前的  遍历二叉树输出所有的路径的题。但是我太弱鸡,开始都没有用dfs做出来:

    使用深度优先搜索:

    • 把最终结果当成dfs 的参数,因为一直要改变,所以是一个引用类型,定义一个参数存储当前拼成的字符串
    • dfs递归的终点,是这个数是最后一个数,
    • 每次迭代的时候,改变当前拼成的字符串
     void dfs(vector<string>& str,string save, string digits, int temp, int l)
        {
            vector<string> d={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
            if(temp==l)
            {
                str.push_back(save);
                return;
            }
                
            int c=digits[temp]-'0';
            int i=0;
            while(i<d[c].length())
            {
                cout<<d[c][i]<<endl;
      
                dfs(str,save+d[c][i],digits,temp+1,l);
    
                i++;
            }
            
        }
        vector<string> letterCombinations(string digits) {
            vector<string> str;
            if(digits.size()==0)
                return str;
            string save;
           
           dfs (str,save, digits,0, digits.size()) ;
            return str;
               
    

      

    在递归传递的时候要主要:

     dfs(str,save+d[c][i],digits,temp+1,l);
    表示传入的参数为save+d[c][i], 而递归之前的save 没有改变;

    如果使用

    save.push_back(d[c][i]);
    dfs(str,save+d[c][i],digits,temp+1,l);

    save.pop();

    如果改变了save, 还需要再变回来。

  • 相关阅读:
    python 随机字符串
    Ajax
    Django (Form)
    Django (项目)
    Django (二)
    Django (一)
    Django 学生管理系统
    地理坐标系 与 投影坐标系
    shapefile
    图表绘制工具--Matplotlib 3
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7286056.html
Copyright © 2020-2023  润新知