mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Merge pull request #1491 from jujunwang/master
添加(1382. 将二叉搜索树变平衡 0031.下一个排列)的go版本
This commit is contained in:
@ -171,13 +171,13 @@ class Solution(object):
|
|||||||
i = n-2
|
i = n-2
|
||||||
while i >= 0 and nums[i] >= nums[i+1]:
|
while i >= 0 and nums[i] >= nums[i+1]:
|
||||||
i -= 1
|
i -= 1
|
||||||
|
|
||||||
if i > -1: // i==-1,不存在下一个更大的排列
|
if i > -1: // i==-1,不存在下一个更大的排列
|
||||||
j = n-1
|
j = n-1
|
||||||
while j >= 0 and nums[j] <= nums[i]:
|
while j >= 0 and nums[j] <= nums[i]:
|
||||||
j -= 1
|
j -= 1
|
||||||
nums[i], nums[j] = nums[j], nums[i]
|
nums[i], nums[j] = nums[j], nums[i]
|
||||||
|
|
||||||
start, end = i+1, n-1
|
start, end = i+1, n-1
|
||||||
while start < end:
|
while start < end:
|
||||||
nums[start], nums[end] = nums[end], nums[start]
|
nums[start], nums[end] = nums[end], nums[start]
|
||||||
@ -190,6 +190,26 @@ class Solution(object):
|
|||||||
## Go
|
## Go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
//卡尔的解法
|
||||||
|
func nextPermutation(nums []int) {
|
||||||
|
for i:=len(nums)-1;i>=0;i--{
|
||||||
|
for j:=len(nums)-1;j>i;j--{
|
||||||
|
if nums[j]>nums[i]{
|
||||||
|
//交换
|
||||||
|
nums[j],nums[i]=nums[i],nums[j]
|
||||||
|
reverse(nums,0+i+1,len(nums)-1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reverse(nums,0,len(nums)-1)
|
||||||
|
}
|
||||||
|
//对目标切片指定区间的反转方法
|
||||||
|
func reverse(a []int,begin,end int){
|
||||||
|
for i,j:=begin,end;i<j;i,j=i+1,j-1{
|
||||||
|
a[i],a[j]=a[j],a[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## JavaScript
|
## JavaScript
|
||||||
|
@ -123,6 +123,46 @@ class Solution:
|
|||||||
```
|
```
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
|
```go
|
||||||
|
/**
|
||||||
|
* Definition for a binary tree node.
|
||||||
|
* type TreeNode struct {
|
||||||
|
* Val int
|
||||||
|
* Left *TreeNode
|
||||||
|
* Right *TreeNode
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
func balanceBST(root *TreeNode) *TreeNode {
|
||||||
|
// 二叉搜索树中序遍历得到有序数组
|
||||||
|
nums := []int{}
|
||||||
|
// 中序递归遍历二叉树
|
||||||
|
var travel func(node *TreeNode)
|
||||||
|
travel = func(node *TreeNode) {
|
||||||
|
if node == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
travel(node.Left)
|
||||||
|
nums = append(nums, node.Val)
|
||||||
|
travel(node.Right)
|
||||||
|
}
|
||||||
|
// 二分法保证左右子树高度差不超过一(题目要求返回的仍是二叉搜索树)
|
||||||
|
var buildTree func(nums []int, left, right int) *TreeNode
|
||||||
|
buildTree = func(nums []int, left, right int) *TreeNode {
|
||||||
|
if left > right {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
mid := left + (right-left) >> 1
|
||||||
|
root := &TreeNode{Val: nums[mid]}
|
||||||
|
root.Left = buildTree(nums, left, mid-1)
|
||||||
|
root.Right = buildTree(nums, mid+1, right)
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
travel(root)
|
||||||
|
return buildTree(nums, 0, len(nums)-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
JavaScript:
|
JavaScript:
|
||||||
```javascript
|
```javascript
|
||||||
var balanceBST = function(root) {
|
var balanceBST = function(root) {
|
||||||
|
Reference in New Issue
Block a user