力扣---2020.2.22

22. 括號生成

//回溯法
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList();
        backtrack(ans, "", 0, 0, n);
        return ans;
    }

    public void backtrack(List<String> ans, String cur, int open, int close, int max){
        if (cur.length() == max * 2) {
            ans.add(cur);
            return;
        }

        if (open < max)
            backtrack(ans, cur+"(", open+1, close, max);
        if (close < open)
            backtrack(ans, cur+")", open, close+1, max);
    }
}
/*
 代碼的理解: 對於任何一個括號組合(1對以上),可以表達爲這麼一種組合 ( left ) right 的形式。
 其中,若left 和 right 兩部分的括號總數爲 n-1對,那麼新的組合 ( left ) right 則有n對,這樣將n對括號求解,
 轉化爲n-1對的求解,以此類推直到零對括號可以直接給出空字符串的解。
 以3對爲例,可拆解爲 “( left=0對)right=2對”“( left=1對)right=1對”“( left=2對)right=0對”。*/
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList();
        if (n == 0) {
            ans.add("");
        } else {
            for (int c = 0; c < n; ++c)
                for (String left: generateParenthesis(c))
                    for (String right: generateParenthesis(n-1-c))
                        ans.add("(" + left + ")" + right);
        }
        return ans;
    }
}

230. 二叉搜索樹中第K小的元素

class Solution {
    public int kthSmallest(TreeNode root, int k) {
        //中序遍歷
        List<Integer> list = new ArrayList();
        findK(root, k, list);
        return list.get(k - 1);
    }

    void findK(TreeNode root, int k, List list){
        if(root == null || list.size() == k){
            return;
        }
        findK(root.left, k, list);
        list.add(root.val);
        findK(root.right, k, list);
    }
}
class Solution {
    public int kthSmallest(TreeNode root, int k) {
        int leftN=findChild(root.left);
        if(leftN+1==k) return root.val;
        else if(k<=leftN){
            return kthSmallest(root.left, k);
        }
        else return kthSmallest(root.right, k-leftN-1);
    }
    //查找子節點個數
     public int findChild(TreeNode root){
        if(root==null) return 0;
        return findChild(root.left)+findChild(root.right)+1;
    }
}

171. Excel表列序號

class Solution {
    public int titleToNumber(String s) {
        int ans = 0;
        for(int i=0;i<s.length();i++) {
            int num = s.charAt(i) - 'A' + 1;
            ans = ans * 26 + num;
        }
        return ans;
    }
}
class Solution {
    public int titleToNumber(String s) {
        char[] charArray = s.toCharArray();
        int res = 0;
        for(int i = 0; i < charArray.length; i++) {
            res = res*26 + (charArray[i] - 'A' + 1);
        }
        return res;
    }
}

你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

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