【重点】【特例】31.下一个排列
2023-12-27 22:52:34
法1:找规律
class Solution {
public void nextPermutation(int[] nums) {
int small = -1, big = -1;
for (int i = nums.length - 2; i >= 0; --i) {
if (nums[i] < nums[i + 1]) {
small = i;
break;
}
}
if (small == -1) {
reverse(0, nums.length - 1, nums);
} else {
big = small + 1;
for (int i = big; i < nums.length; ++i) {
if (nums[i] > nums[small]) {
if (nums[i] <= nums[big]) { // 注意这里需要有"=", 保证small位后面的数字是降序排列
big = i;
}
}
}
swap(small, big, nums);
reverse(small + 1, nums.length - 1, nums);
}
}
public void reverse(int i, int j, int[] nums) {
while (i < j) {
swap(i, j, nums);
++i;
--j;
}
}
public void swap(int i, int j, int[] nums) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
文章来源:https://blog.csdn.net/Allenlzcoder/article/details/135252930
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!