zoukankan      html  css  js  c++  java
  • 刷题17. Letter Combinations of a Phone Number

    一、题目说明

    题目17. Letter Combinations of a Phone Number,题目给了下面一个图,输入一个字符串包括2-9,输出所有可能的字符组合。

    如输入23所有可能的输出:

    "ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"
    

    二、我的做法

    这个题目,我思考了4个小时(惭愧严重超时了),做法如下:

    #include<iostream>
    #include<vector>
    #include<unordered_map>
    using namespace std;
    class Solution{
    	public:
    		vector<string> letterCombinations(string s){
    			vector<string> res;
    
    			if(s.size()<1) return res;
    			int num = 1;
    			unordered_map<char,string> ump;
    			
    			ump['2'] = "abc";
    			ump['3'] = "def";
    			ump['4'] = "ghi";
    			ump['5'] = "jkl";
    			ump['6'] = "mno";
    			ump['7'] = "pqrs";
    			ump['8'] = "tuv";
    			ump['9'] = "wxyz";
    			
    			for(int i=0;i<s.size();i++){
    				switch(s[i]){
    					case '2':
    					case '3':
    					case '4':
    					case '5':
    					case '6':
    					case '8':
    						num *= 3;
    						break;
    					case '7':
    					case '9':
    					    num *=4;
    						break;					
    				}
    			}
    			for(int i=0;i<num;i++){
    				res.push_back("");
    			}
    
                int curNum = num;
    			for(int j=0;j<s.size();++j){
    				char curr = s[j];
    				string curStr = ump[curr];
    				curNum /= curStr.size();
    			    for(int i=0;i<num;i++){
    			    	res[i].push_back(curStr[i / curNum % curStr.size()]);
    				}
    			}
    
    			return res;
    		} 
    };
    int main(){
    	Solution s;
    //    vector<string> r = s.letterCombinations("234");
    //    for(vector<string>::iterator it=r.begin();it!=r.end();++it){
    //		cout<<*it<<" ";
    //	}
    //	cout<<endl;
    	vector<string> r = s.letterCombinations("8");
        for(vector<string>::iterator it=r.begin();it!=r.end();++it){
    		cout<<*it<<" ";
    	}
    	return 0;
    }
    

    这个是我第一次,做“完美”的代码。臭美一下!

    Runtime: 0 ms, faster than 100.00% of C++ online submissions for Letter Combinations of a Phone Number.
    Memory Usage: 8.4 MB, less than 100.00% of C++ online submissions for Letter Combinations of a Phone Number.
    

    三、更优化的做法

    第一次可以自豪的说一句,这个就是最优化的代码了。哈哈!

    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    机器学习理论决策树理论第二卷
    机器学习理论决策树算法第一卷
    win7 下安装 Ubuntu16.04以及Centos6.5 双系统小结
    mapreduce学习工程之五---map端join连接
    org.apache.hadoop.ipc.Client: Retrying connect to server异常的解决
    ubuntu server命令换源
    linux下的软链接和硬链接
    linux下 mysql完全卸载
    Java学习路线
    git练习题
  • 原文地址:https://www.cnblogs.com/siweihz/p/12234127.html
Copyright © 2011-2022 走看看