[LeetCode] 031. Next Permutation (Medium) (C++/Python)
来源:互联网 发布:windows管道通信 编辑:程序博客网 时间:2024/05/01 07:47
索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode
031. Next Permutation (Medium)
链接:
题目:https://oj.leetcode.com/problems/next-permutation/
代码(github):https://github.com/illuz/leetcode
题意:
求一个序列的下一个排列。
分析:
可以用 STL 里的 ‘next_permutation’ 偷懒。
具体算法是:
首先,从最尾端开始往前寻找两个相邻的元素,令第一个元素是 i,第二个元素是 ii,且满足
i<ii
;
然后,再从最尾端开始往前搜索,找出第一个大于 i 的元素,设其为 j;
然后,将 i 和 j 对调,再将 ii 及其后面的所有元素反转。
代码:
C++:
class Solution {public: void nextPermutation(vector<int> &num) {if (!num.size())return;int idx = num.size() - 2;// 1. find out the last wrong orderwhile (idx >= 0 && num[idx] >= num[idx + 1])idx--;// 2. swapif (idx >= 0) {int i = idx + 1;while (i < num.size() && num[i] > num[idx])i++;swap(num[i - 1], num[idx]);}// 3. reversereverse(num.begin() + idx + 1, num.end());}};
Python:
class Solution: # @param num, a list of integer # @return nothing (void), do not return anything, modify num in-place instead. def nextPermutation(self, num): if not len(num): return idx = len(num) - 2 # 1. find out the last wrong order while idx >= 0 and num[idx] >= num[idx + 1]: idx -= 1 # 2. swap if idx >= 0: i = idx + 1 while i < len(num) and num[i] > num[idx]: i += 1 num[i - 1], num[idx] = num[idx], num[i - 1] # 3. reverse left, right = idx + 1, len(num) - 1 while left <= right: num[left], num[right] = num[right], num[left] left += 1 right -= 1
1 0
- [LeetCode] 031. Next Permutation (Medium) (C++/Python)
- [Leetcode 31, medium] Next Permutation
- Leetcode之Next Permutation (Medium)
- LeetCode刷题(C++)——Next Permutation(Medium)
- 【Leetcode】【python】Next Permutation
- Leetcode 31. Next Permutation (Medium) (cpp)
- Leetcode 31. Next Permutation (Medium) (java)
- LeetCode 31 Next Permutation (C,C++,Java,Python)
- 31. Next Permutation Leetcode Python
- [leetcode: Python]31.Next Permutation
- 31. Next Permutation Medium
- LeetCode(31): Next Permutation (C++)
- Leetcode c语言-Next Permutation
- LeetCode-31-Next Permutation(找规律/证明)-Medium
- leetcode 日经贴,python code -Next Permutation
- [leetcode-31]Next Permutation(C)
- leetcode刷题系列C++-next permutation
- 【C++】【LeetCode】31. Next Permutation && 46. Permutations
- java网络编程基础夯实03-为什么不能直接通过IP访问网站
- 集合的表示及其运算
- opencv进行图像复原
- 回调函数
- socket阻塞与非阻塞,同步与异步、I/O模型
- [LeetCode] 031. Next Permutation (Medium) (C++/Python)
- LeetCode #189 Rotate Array
- 一个程序员的自我修养:为什么我这么低端
- (hdu step 5.2.3)Phone List(Trie实现:在一堆号码中,判断是否有号码是其他号码的前缀)
- WebView基本使用
- Linux内核模块
- 出现java.lang.UnsupportedClassVersionError 错误的原因
- iOS_转场效果
- 归一化用于文本分类中的特征向量计算