“循环次数不确定”“所有组合”就考虑到用回溯解法。
注意问题是:在leetcode和本地调试都没问题,但提交就会发生解答错误,这是因为用了static变量和方法的问题,在leetcode中提交不要用static,调用的方法可以改成void,在方法外设置变量。
class leetCode17 {
List<String> ans = new ArrayList<String>();
public List<String> letterCombinations(String digits) {
if (digits == null || digits.length() == 0) {
return ans;
}
List<String> str = new ArrayList<String>();
for (int i = 0; i < digits.length(); i++) {
str.add(getValue(digits.charAt(i)));
}
backtracking(str,0,"");
return ans;
}
void backtracking(List<String> str, int index, String s) {
if (index == str.size()) { //边界条件
ans.add(s);
return;
}
String letters =str.get(index);
for (int i = 0; i < letters.length(); i++) {
backtracking(str, index+1, s+letters.charAt(i));
}
}
private static String getValue(char c) {
switch (c) {
case '2': return "abc";
case '3': return "def";
case '4': return "ghi";
case '5': return "jkl";
case '6': return "mno";
case '7': return "pqrs";
case '8': return "tuv";
case '9': return "wxyz";
default: return null;
}
}
}