力扣31
也就是比当前排列大的最小排列,这题说实话有点考思维,有点像智力题
我直接给出结果再分析
从后往前找第一个nums[i] < nums[i + 1],交换,将[i+1 : n]排序
分析
其实我说完结论你细想确实是这么回事
一般来说我们几个数字做排列的时候,
- 想排出最大的数字,肯定是大数放前面。换句话说,只要不是满足nums[i] > nums[i + 1],就一定不是最大的排列
- 想排出最小的数字,肯定是小数放前面。
那么如果我们想找到比某个排列大的排列,我们也应该遵从这个思路
- 先从后往前找nums[i] < nums[i + 1],交换那么nums[i] > nums[i + 1],那么这个数一定比当前的大
- 将剩下的[i+1 : n]升序排序
两步可互换
举个例子:
如果要找比[1, 5, 6, 4]大的排列,先找到5 < 6,交换,[1,6,5,4],这个排列一定比原来的大,将[5,4]升序排序,[1,6,4,5],就找到了比这个排列大的最小排列
思路清晰,这题写起来并不难
1 | public void nextPermutation(int[] nums) { |
其他题目点击这里