LeetCode 31. 下一个排列
题目描述
思路分析
本题核心是字典序排列。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
func nextPermutation(nums []int) {
n := len(nums)
i := n - 2
// 从后往前找到第一个 nums[i] < nums[i+1] 的位置
for i >= 0 && nums[i] >= nums[i+1] {
i--
}
if i >= 0 {
j := n - 1
// 再从后往前找到第一个比 nums[i] 大的数 nums[j]
for j >= 0 && nums[j] <= nums[i] {
j--
}
// 交换 nums[i] 和 nums[j]
nums[i], nums[j] = nums[j], nums[i]
}
// 翻转 i+1 到末尾的部分
for l, r := i+1, n-1; l < r; l, r = l+1, r-1 {
nums[l], nums[r] = nums[r], nums[l]
}
}
- 时间复杂度:O (n)
- 空间复杂度:O (1)
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用