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;
}
}
你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步