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 楼
挺朋友说那个镜头是买机器自带的。有机器的人都有那个头。
相关阅读
master(没用过opt)后,接着社区大学毕业还能有opt吗?求关注!!OPT被拒!!十万火急!!请问OPT EAD卡上标有地址吗?麻烦大家帮我看看这个agreement,我不太敢签。想提前离开ICC公司。会被查出来吗?Intern Offer 求建议+ms onsite面经如果OUT OF STATUS之后一段时间内H1B批准,会有问题么?这个周末听三爷来讲zookeeper有没有人面过citrix?顺便也求网上面试经验offer选择求意见请给个讲distributed key-value store design 的link或答案?Opt expedite request急问,offer negotiation (转载)求software engineering 内推惭愧地问,有没有人知道哪些大公司招商科给办H1B的?求IBM内推面试时该不该主动解释自己的弱点?google的机会[求吐槽]我伙呆,硅谷高级工程师年薪16.5万美金起Google的鸡肋offer (转载)