Strobogrammatic Number II

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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章