From 20994f4fc5171bd9948404066f65d1ce830f91cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=AF=85=E9=AA=8F?= Date: Fri, 16 Apr 2021 13:52:35 +0800 Subject: [PATCH] =?UTF-8?q?'=E9=AA=8C=E8=AF=81=E4=BA=8C=E5=8F=89=E6=A0=91'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- leetcode/初级算法/树/对称二叉树/main.go | 36 ++++++++++++ leetcode/初级算法/树/验证二叉搜索树/main.go | 17 ++++-- leetcode/题库/566. 重塑矩阵/main.go | 63 +++++++++++++++++++++ 3 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 leetcode/初级算法/树/对称二叉树/main.go create mode 100644 leetcode/题库/566. 重塑矩阵/main.go diff --git a/leetcode/初级算法/树/对称二叉树/main.go b/leetcode/初级算法/树/对称二叉树/main.go new file mode 100644 index 0000000..0cfa068 --- /dev/null +++ b/leetcode/初级算法/树/对称二叉树/main.go @@ -0,0 +1,36 @@ +package main +/** +给定一个二叉树,检查它是否是镜像对称的。 +例如,二叉树[1,2,2,3,4,4,3] 是对称的。 + + 1 + / \ + 2 2 + / \ / \ +3 4 4 3 + + +但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: + 1 + / \ + 2 2 + \ \ + 3 3 + + +进阶: +你可以运用递归和迭代两种方法解决这个问题吗? + */ + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} +func isSymmetric(root *TreeNode) bool { + + return true +} +func main() { + +} diff --git a/leetcode/初级算法/树/验证二叉搜索树/main.go b/leetcode/初级算法/树/验证二叉搜索树/main.go index d93f5aa..9449af2 100644 --- a/leetcode/初级算法/树/验证二叉搜索树/main.go +++ b/leetcode/初级算法/树/验证二叉搜索树/main.go @@ -1,4 +1,7 @@ package main + +import "math" + /** 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 @@ -30,18 +33,22 @@ type TreeNode struct { Left *TreeNode Right *TreeNode } + func isValidBST(root *TreeNode) bool { + return helper(root, math.MinInt64, math.MaxInt64) +} + +func helper(root *TreeNode, lower, upper int) bool { if root == nil { return true } - if root.Left !=nil && root.Left.Val <= root.Val || root.Right !=nil && root.Val <= root.Right.Val { - return true - } else { + if root.Val <= lower || root.Val >= upper { return false } - return isValidBST(root.Left) && isValidBST(root.Right) + return helper(root.Left, lower, root.Val) && helper(root.Right, root.Val, upper) } + func main() { - t := &TreeNode{2, &TreeNode{1, nil, nil}, &TreeNode{3, nil, nil}} + t := &TreeNode{3, &TreeNode{5, nil, nil}, &TreeNode{3, nil, nil}} print(isValidBST(t)) } \ No newline at end of file diff --git a/leetcode/题库/566. 重塑矩阵/main.go b/leetcode/题库/566. 重塑矩阵/main.go new file mode 100644 index 0000000..fa3c07f --- /dev/null +++ b/leetcode/题库/566. 重塑矩阵/main.go @@ -0,0 +1,63 @@ +package main + +import "fmt" + +/** +在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。 + +给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。 + +重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。 + +如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 + +示例 1: + +输入: +nums = +[[1,2], + [3,4]] +r = 1, c = 4 +输出: +[[1,2,3,4]] +解释: +行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。 +示例 2: + +输入: +nums = +[[1,2], + [3,4]] +r = 2, c = 4 +输出: +[[1,2], + [3,4]] +解释: +没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。 + +注意: + +给定矩阵的宽和高范围在 [1, 100]。 +给定的 r 和 c 都是正数。 +*/ +//改变矩阵维度 +func matrixReshape(nums [][]int, r int, c int) [][]int { + n, m := len(nums), len(nums[0]) + if m*n != r*c { + return nums + } + ans := make([][]int, r) + for i := range ans { + ans[i] = make([]int, c) + } + for i := 0; i < n*m; i++ { + ans[i/c][i%c] = nums[i/m][i%m] + } + return ans +} + +func main() { + var nums = [][]int{{1,2},{3,4}} + a :=matrixReshape(nums, 1, 4) + fmt.Printf("%+v",a) +}