[LeetCode] 31. Next Permutation
2017-07-25 11:29
281 查看
https://leetcode.com/problems/next-permutation/#/solution
思路:
从右向左单向遍历,寻找第一个a[i-1] < a[i]的位置
然后从a[i]向后找,找到一个刚好大于a[i-1]的数a[j],交换a[i-1]<->a[j]
将a[i]到结尾逆序
写代码bug连连:
考虑
1 没有找到a[i-1],则全部逆序:
2 没有妥妥找到a[j](那就是后面最小的那个数)如 1 5 8 1 7 6 5 3 2
3 在找恰好大于a[i-1]的数,注意等于号 如1 5 1
思路:
从右向左单向遍历,寻找第一个a[i-1] < a[i]的位置
然后从a[i]向后找,找到一个刚好大于a[i-1]的数a[j],交换a[i-1]<->a[j]
将a[i]到结尾逆序
写代码bug连连:
考虑
1 没有找到a[i-1],则全部逆序:
2 没有妥妥找到a[j](那就是后面最小的那个数)如 1 5 8 1 7 6 5 3 2
3 在找恰好大于a[i-1]的数,注意等于号 如1 5 1
class Solution { public: void nextPermutation(vector<int>& nums) { if (nums.size() == 0) return; int i = nums.size() - 1; int temp = 0; while (i >= 1) { if (nums[i-1] >= nums[i]) { i--; } else { break; } } if (i == 0) { reverse(nums.begin(), nums.end()); return; } else { int t = nums[i - 1]; int j; for (j = i; j < nums.size()-1; j++) { if (nums[j] > t && nums[j+1] <= t) { nums[i-1] = nums[j]; nums[j] = t; reverse(nums.begin() + i, nums.end()); return; } } nums[i-1] = nums[j]; nums[j] = t; reverse(nums.begin() + i, nums.end()); } } };
相关文章推荐
- leetcode题解-31. Next Permutation
- LEETCODE 31. Next Permutation
- LeetCode - 31. Next Permutation
- Leetcode: 31. Next Permutation
- LeetCode 31: Next Permutation
- Java [leetcode 31]Next Permutation
- LeetCode 31~32
- LeetCode 31. Next Permutation
- leetCode(31):Combination Sum III 分类: leetCode 2015-07-07 10:23 163人阅读 评论(0) 收藏
- Leetcode 31. Next Permutation
- LeetCode 31. Next Permutation
- 【LeetCode】C# 31、Next Permutation
- LeetCode 31. Next Permutation
- LeetCode 31. Next Permutation
- LeetCode 2016.3.18 47,31
- Leetcode 31. Next Permutation
- 【LeetCode】31. Next Permutation解法
- leetcode 31. Next Permutation
- leetcode(31) Next Permutation
- Leetcode刷题记——31. Next Permutation(下一个排列)