方法1: 这题思路还是比较简单的,用recursion。但是00这个edge case处理起来太麻烦了,我就直接去看人家的答案了。答案写的非常好,它新引进一个参数来标记现在在recursive call的第几层。如果不是在最上层的话就得加00。时间复杂度5的n次方。
class Solution {
public List<String> findStrobogrammatic(int n) {
return helper(n, n);
}
List<String> helper(int n, int m) {
if (n == 0) return new ArrayList<String>(Arrays.asList(""));
if (n == 1) return new ArrayList<String>(Arrays.asList("0", "1", "8"));
List<String> list = helper(n - 2, m);
List<String> res = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (n != m) res.add("0" + s + "0");
res.add("1" + s + "1");
res.add("6" + s + "9");
res.add("8" + s + "8");
res.add("9" + s + "6");
}
return res;
}
}
总结:
- 无