funccombine(n int, k int) [][]int { ans := make([][]int, 0) set := make([]int, 0) var findCombine func(int) findCombine = func(index int) { iflen(set) > k || index + n - index + 1 < k { // 当前元素个数已大于k, 或者即使剩余元素全部选上, 都不够k个 //提前退出 return } if index == n + 1 { // 子集中元素个数为k iflen(set) == k { ans = append(ans, append([]int{}, set...)) } return } findCombine(index + 1) set = append(set, index) findCombine(index + 1) set = set[:len(set) - 1] } findCombine(1) return ans }
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ funcinvertTree(root *TreeNode) *TreeNode { if root == nil { returnnil } invertTree(root.Left) invertTree(root.Right) root.Left, root.Right = root.Right, root.Left return root}
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ import"math"
// 写法一 funcmaxDepth(root *TreeNode)int { var ans int var depth func(*TreeNode, int) depth = func(root *TreeNode, current int) { if root == nil { return } ans = int(math.Max(float64(ans), float64(current))) depth(root.Left, current+1) depth(root.Right, current+1) } depth(root, 1) return ans }
// 写法二 funcmaxDepth(root *TreeNode)int { var current, ans int var depth func(*TreeNode) depth = func(root *TreeNode) { if root == nil { return } current++ ans = int(math.Max(float64(ans), float64(current))) depth(root.Left) depth(root.Right) current-- // 还原现场 } depth(root) return ans }
funcmyPow(x float64, n int)float64 { if n < 0 { return1 / myPow(x, -n) } if n == 0 { return1 } sub := myPow(x, n / 2) if n % 2 == 0 { return sub * sub } else { return sub * sub * x } }
括号生成
LeetCode 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解题思路
这题的关键在于子问题的划分, 把原问题划分为(a)b来进行递归求解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funcgenerateParenthesis(n int) []string { if n == 0 { return []string{""} } ans := make([]string, 0)
for i := 1; i <= n; i++ { result_a := generateParenthesis(i - 1) result_b := generateParenthesis(n - i)
for _, a := range result_a { for _, b := range result_b { ans = append(ans, "(" + a + ")" + b) } } } return ans }