使用电话键盘给定整数n,使用输入n的数字找出所有可能的字符串。 返回数字0和1的空字符串。
输入
23
输出
ad
ae
af
bd
be
bf
cd
ce
cf
代码:
public class returnKeypad {
private static String[] correspondingkepad(int n) {
String keyWords[];
switch (n) {
case 2:
keyWords = new String[]{"a","b","c"};
break;
case 3:
keyWords = new String[]{"d","e","f"};
break;
case 4:
keyWords = new String[]{"g","h","i"};
break;
case 5:
keyWords = new String[]{"j","k","l"};
break;
case 6:
keyWords = new String[]{"m","n","o"};
break;
case 7:
keyWords = new String[]{"p","q","r","s"};
break;
case 8:
keyWords = new String[]{"t","u","v"};
break;
case 9:
keyWords = new String[]{"w","x","y","z"};
break;
default:
keyWords = new String[]{""};
}
return keyWords;
}
public static String[] keypad(int n){
if (n == 0) {
String[] ans = {""};
return ans;
}
String[] smallAns = keypad( n / 10 ); //line 45
String[] p = correspondingkepad(n % 10);
String[] ans = new String[p.length * smallAns.length];
int k = 0;
for(int i = 0; i < ans.length; i++) {
for(int j = 0; j < p.length; j++) {
ans[k] = smallAns[i] + p[j]; //line 55
k++;
}
}
return ans;
}
public static void main(String[] args) {
String s = "xyz";
String[] ans = keypad(234); //line 66
for(int i = 0; i < ans.length; i++) {
System.out.println(ans[i]);
}
}
}
例外:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at returnKeypad.keypad(returnKeypad.java:55)
at returnKeypad.keypad(returnKeypad.java:45)
at returnKeypad.keypad(returnKeypad.java:45)
at returnKeypad.main(returnKeypad.java:66
我在评论中提到行号
请告诉我该问题的解决方法是否错误,或者我的代码有什么问题 谢谢
答案 0 :(得分:2)
您以ans
而不是smallAns
的大小对“ i”进行迭代
更改:
for(int i = 0; i<ans.length; i++) {
for(int j =0; j<p.length; j++) {
ans[k] = smallAns[i] + p[j]; //Line55
k++;
}
}
收件人:
for(int i = 0; i<smallAns.length; i++) {
for(int j =0; j<p.length; j++) {
ans[k] = smallAns[i] + p[j]; //Line55
k++;
}
}
这将解决越界错误,我不确定其余逻辑是否有意义...
答案 1 :(得分:1)
您的smallAns[i]
除了""
之外没有其他任何值,因此当我增加到1时,java.lang.ArrayIndexOutOfBoundsException
就失败了。请在keypad(int n)
中完善您的逻辑;由于您使用的是递归调用,因此返回时,它只会在最后一次迭代中出现。