R*y
2 楼
题目如下,要求recursive 和 non recursive解法
write a program that given a 7 digit telephone number, could print all
possible combinations of letters that each number could represent.
second part: if the telephone number changes to 12 digits one
recursive 解法很清晰,建立一个字典,然后递归就好了。
iterative 解法,我就卡住了,google了一下,有一个解法如下:
private static ArrayList processOneNumber(ArrayList input, int[] phoneNum,
int currentNum) {
ArrayList output = new ArrayList();
int numberToProcess = phoneNum[currentNum];
char c;
// process 1st number
if (input.isEmpty()) {
if (TelephoneWords.isOneOrZero(numberToProcess)) {
c = TelephoneWords.getCharKey(numberToProcess, 0);
output.add(Character.toString(c));
} else {
for (int i = 0; i < 3; i++) {
c = TelephoneWords.getCharKey(numberToProcess, i);
output.add(Character.toString(c));
}
}
} else { // process rest of the number
for (String result : input) {
if (TelephoneWords.isOneOrZero(numberToProcess)) {
c = TelephoneWords.getCharKey(numberToProcess, 0);
output.add(result.concat(Character.toString(c)));
} else {
for (int i = 0; i < 3; i++) {
c = TelephoneWords.getCharKey(numberToProcess, i);
output.add(result.concat(Character.toString(c)));
}
}
}
return output;
}
这个解法每次处理一个digit然后存储当前结果,下一次调用将新的char 附加到后面。
这样的解法下来,arraylist 巨大无比,而且有很多中间的结果,比如A,B,C 这样的
不是最终结果的过渡字符。
原书的解法貌似错了,希望各位大神多多指教
write a program that given a 7 digit telephone number, could print all
possible combinations of letters that each number could represent.
second part: if the telephone number changes to 12 digits one
recursive 解法很清晰,建立一个字典,然后递归就好了。
iterative 解法,我就卡住了,google了一下,有一个解法如下:
private static ArrayList processOneNumber(ArrayList input, int[] phoneNum,
int currentNum) {
ArrayList output = new ArrayList();
int numberToProcess = phoneNum[currentNum];
char c;
// process 1st number
if (input.isEmpty()) {
if (TelephoneWords.isOneOrZero(numberToProcess)) {
c = TelephoneWords.getCharKey(numberToProcess, 0);
output.add(Character.toString(c));
} else {
for (int i = 0; i < 3; i++) {
c = TelephoneWords.getCharKey(numberToProcess, i);
output.add(Character.toString(c));
}
}
} else { // process rest of the number
for (String result : input) {
if (TelephoneWords.isOneOrZero(numberToProcess)) {
c = TelephoneWords.getCharKey(numberToProcess, 0);
output.add(result.concat(Character.toString(c)));
} else {
for (int i = 0; i < 3; i++) {
c = TelephoneWords.getCharKey(numberToProcess, i);
output.add(result.concat(Character.toString(c)));
}
}
}
return output;
}
这个解法每次处理一个digit然后存储当前结果,下一次调用将新的char 附加到后面。
这样的解法下来,arraylist 巨大无比,而且有很多中间的结果,比如A,B,C 这样的
不是最终结果的过渡字符。
原书的解法貌似错了,希望各位大神多多指教
j*y
4 楼
搞个 for循环就可以了吧
【在 R**y 的大作中提到】
: 题目如下,要求recursive 和 non recursive解法
: write a program that given a 7 digit telephone number, could print all
: possible combinations of letters that each number could represent.
: second part: if the telephone number changes to 12 digits one
: recursive 解法很清晰,建立一个字典,然后递归就好了。
: iterative 解法,我就卡住了,google了一下,有一个解法如下:
: private static ArrayList processOneNumber(ArrayList input, int[] phoneNum,
: int currentNum) {
: ArrayList output = new ArrayList();
: int numberToProcess = phoneNum[currentNum];
【在 R**y 的大作中提到】
: 题目如下,要求recursive 和 non recursive解法
: write a program that given a 7 digit telephone number, could print all
: possible combinations of letters that each number could represent.
: second part: if the telephone number changes to 12 digits one
: recursive 解法很清晰,建立一个字典,然后递归就好了。
: iterative 解法,我就卡住了,google了一下,有一个解法如下:
: private static ArrayList processOneNumber(ArrayList input, int[] phoneNum,
: int currentNum) {
: ArrayList output = new ArrayList();
: int numberToProcess = phoneNum[currentNum];
c*a
6 楼
import java.util.Hashtable;
public class Solution {
Hashtable Dict = new Hashtable ()
;
public ArrayList letterCombinations(String digits) {
ArrayList res = new ArrayList();
if(digits.length()==0){
res.add("");
return res;
}
Dict.put(2, new String[]{"a", "b", "c"});
Dict.put(3, new String[]{"d", "e", "f"});
Dict.put(4, new String[]{"g", "h", "i"});
Dict.put(5, new String[]{"j", "k", "l"});
Dict.put(6, new String[]{"m", "n", "o"});
Dict.put(7, new String[]{"p", "q", "r", "s"});
Dict.put(8, new String[]{"t", "u", "v"});
Dict.put(9, new String[]{"w", "x", "y", "z"});
permute(res,digits, "", digits.length());
return res;
}
public void permute(ArrayList res, String digits, String buffer,
int size){
if(buffer.length()==size){
res.add(buffer);
return;
}
for(int i =0; i for(String c: Dict.get(digits.charAt(i)-48))
permute(res, digits.substring(i+1), buffer + c,size);
}
}
}
刚刚写的,跟subset of string差不多,写法一样,就加了一个for loop..
//subset of string eg, ab: a, b , ab
public static void subset(String s){
if(s.length()==0) return;
subset(s, "");
}
public static void subset(String s,String res){
System.out.println(res);
for(int i =0;i subset(s.substring(i+1), res+s.charAt(i));
}
public class Solution {
Hashtable
;
public ArrayList
ArrayList
if(digits.length()==0){
res.add("");
return res;
}
Dict.put(2, new String[]{"a", "b", "c"});
Dict.put(3, new String[]{"d", "e", "f"});
Dict.put(4, new String[]{"g", "h", "i"});
Dict.put(5, new String[]{"j", "k", "l"});
Dict.put(6, new String[]{"m", "n", "o"});
Dict.put(7, new String[]{"p", "q", "r", "s"});
Dict.put(8, new String[]{"t", "u", "v"});
Dict.put(9, new String[]{"w", "x", "y", "z"});
permute(res,digits, "", digits.length());
return res;
}
public void permute(ArrayList
int size){
if(buffer.length()==size){
res.add(buffer);
return;
}
for(int i =0; i
permute(res, digits.substring(i+1), buffer + c,size);
}
}
}
刚刚写的,跟subset of string差不多,写法一样,就加了一个for loop..
//subset of string eg, ab: a, b , ab
public static void subset(String s){
if(s.length()==0) return;
subset(s, "");
}
public static void subset(String s,String res){
System.out.println(res);
for(int i =0;i
}
g*7
7 楼
常年?不会把,我今天没抢到还捶胸顿足哭天抢地呢
m*3
9 楼
挺朋友说那个镜头是买机器自带的。有机器的人都有那个头。
相关阅读
生物薄厚哪里找企业的位置啊?GAFM的bonus一般多少?这样的H1B能让HR晚点报到移民局吗?[合集] 问个facebook 面试题真心请教35岁大妈找哪方面的计算机类工作?原来传播领域也还是可以在业界混出来的。。。。。屌丝给跪了今天三面一个印度人,悲剧了,求安慰h1被雷求助OPT马上过期,新申请 H1B 10月生效, 中间GAP怎么办?有些猎头真是不用脑子年薪6-7万的technician职位 (转载)替人发个OFFER电面问题请教求帮助,问点问题hash table 的entry里存的是内容还是指针?OPT statement 该怎么开?SAP, Peoplesoft developer之类的工作都是谁在做?hashtable的遍历什么时候offer最多?面试归来