A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down).
Find all strobogrammatic numbers that are of length = n.
Example:
Input: n = 2
Output: ["11","69","88","96"]
思路:這題就是用dfs來計算裏面的,然後迴歸到最後一層,用裏面的結果去推倒最後一步;這題很巧妙的是,用兩個參數,一個代表當前的size,另外一個代表最終的size;這樣如果不是處理最外面的一層,也就是curlen != n的時候,是可以左右加上0的,但是最外面的一層不能加上0;
class Solution {
public List<String> findStrobogrammatic(int n) {
List<String> list = new ArrayList<String>();
if(n < 0) {
return list;
}
return helper(n, n);
}
private List<String> helper(int curlen, int n) {
if(curlen == 0) {
return new ArrayList<String>(Arrays.asList(""));
}
if(curlen == 1) {
return new ArrayList<String>(Arrays.asList("0", "1", "8"));
}
//假設當前已經做好了 n - 2的size的數字,只需最後一層;
List<String> list = helper(curlen - 2, n);
List<String> res = new ArrayList<String>();
for(String str: list) {
// 這個很巧妙,也就是最最外面的一層,不能加0;裏面都可以加0;
if(curlen != n) {
res.add("0" + str + "0");
}
res.add("1" + str + "1");
res.add("6" + str + "9");
res.add("9" + str + "6");
res.add("8" + str + "8");
}
return res;
}
}