九键输入法中 2~9 每个数字对应了若干个的字母,请找出给定数字组合对应的全部字母组合。
1.该题你返回的组合顺序可以不唯一
2.该题你返回的字母大小写都是可以的
数据范围:数字长度 ,数字中保证不出现 和
键盘数字对应的映射如下:
"55"
["JJ","JK","JL","KJ","KK","KL","LJ","LK","LL"]
"3"
["D","E","F"]
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串vector */ const string lettermap[10]={ "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz", }; vector<string> res; string s; //按两个数字 index 应该也为2 void backtracking(const string &num,int index){ if(index ==num.size()){ res.push_back(s); return ; } int digit =num[index]-'0'; string letters= lettermap[digit]; for(int i=0;i<letters.size();i++){ s.push_back(letters[i]); backtracking(num,index+1); s.pop_back(); } } vector<string> phoneNumber(string num) { // write code here s.clear(); res.clear(); if(num.size()==0)return res; backtracking(num,0); return res; } };
package main //import "fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串一维数组 */ func phoneNumber( num string ) []string { n2c:=map[byte]string{ '2':"abc", '3':"def", '4':"ghi", '5':"jkl", '6':"mno", '7':"pqrs", '8':"tuv", '9':"wxyz", } ans:=[]string{} var dfs func(string,int) dfs=func(s string,idx int){ if idx==len(num){ ans=append(ans,s) return } for _,ch:=range []byte(n2c[num[idx]]){ s+=string(ch) dfs(s,idx+1) s=s[:len(s)-1] } } dfs("",0) return ans }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @return string字符串ArrayList */ private static final String[] seq = new String[]{ "", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"}; public ArrayList<String> phoneNumber (String num) { ArrayList<String> res = new ArrayList<>(); StringBuilder track = new StringBuilder(); int depth = num.length(); backtrack(track,res,0,depth,num); return res; } private void backtrack(StringBuilder track,ArrayList<String>res,int currDepth,int maxDepth,String num) { if (currDepth>=maxDepth) { res.add(track.toString()); return; } int index = (int) num.charAt(currDepth) - '0'; String currSeq = seq[index]; for (int i = 0; i < currSeq.length(); i++) { track.append(currSeq.charAt(i)); backtrack(track,res,currDepth+1,maxDepth,num); track.deleteCharAt(track.length()-1); } } }
import java.util.*; public class Solution { String[] letter_map = {" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; ArrayList<String> res = new ArrayList<>(); public ArrayList<String> phoneNumber (String digits) { if(digits == null || digits.length() == 0) return new ArrayList<>(); dfs(digits, 0, new StringBuilder()); return res; } void dfs(String digits, int index, StringBuilder sb) { if(digits.length() == index){ res.add(sb.toString()); return; } char c = digits.charAt(index); int digit = c - '0'; String string = letter_map[digit]; for(int i = 0; i < string.length(); i++){ sb.append(string.charAt(i)); dfs(digits, index + 1, sb); sb.deleteCharAt(sb.length() - 1); } } }