
LeetCode No31. 下一个排列
发布日期:2021-05-07 23:15:38
浏览次数:22
分类:原创文章
本文共 1386 字,大约阅读时间需要 4 分钟。
题目描述
解答
找规律就行了:
class Solution { public void nextPermutation(int[] nums) { int n = nums.length; //数组的长度 int i = n - 1; //找到递减的第一个位置 while (i > 0 && nums[i - 1] >= nums[i]) { --i; } //分类讨论:判断i是不是0 if (i == 0) { //全部翻转即可 for (int j = 0; j < n / 2; j++) { nums[j] = nums[j] ^ nums[n - 1 - j]; nums[n - 1 - j] = nums[j] ^ nums[n - 1 - j]; nums[j] = nums[j] ^ nums[n - 1 - j]; } } else { //2 5 4 3 //这时nums[i]指向5 //先把5(包括自己)后面的都翻转:2 3 4 5 //再把5左边的值(2)先拿掉:X 3 4 5 //再把2后面比它大的数放这: 3 X 4 5 //把2塞回去: 3 2 4 5 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //翻转i后面的 for (int j = i; j < i + (n - i) / 2; j++) { nums[j] = nums[j] ^ nums[n - 1 - (j - i)]; nums[n - 1 - (j - i)] = nums[j] ^ nums[n - 1 - (j - i)]; nums[j] = nums[j] ^ nums[n - 1 - (j - i)]; } //找到i后面第一个比nums[i-1]大的数 int j = i; while(j < n && nums[j] <= nums[i-1]){ ++j; } //交换两个数 nums[j] = nums[j] ^ nums[i-1]; nums[i-1] = nums[j] ^ nums[i-1]; nums[j] = nums[j] ^ nums[i-1]; } }}
发表评论
最新留言
不错!
[***.144.177.141]2025年04月02日 09时24分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
virtualbox中 Kali Linux安装增强功能
2021-05-09
virtualbox中 Ubuntu挂载共享文件夹
2021-05-09
Python 内置函数笔记
2021-05-09
BootStrapTable 错误
2021-05-09
PHP 配置文件
2021-05-09
PHP 脚本不报错
2021-05-09
代码整洁之道小结
2021-05-09
悲观锁与乐观锁
2021-05-09
js new Date 创建时间默认是8点
2021-05-09
Python实现cmd命令连续执行
2021-05-09
罗马数字
2021-05-09
IO多路复用小故事
2021-05-09
纠错码简介
2021-05-09
码云 Pages 搭建
2021-05-09
《论可计算数及其在判定上的应用》简单理解
2021-05-09
浮点数运算丢失精度
2021-05-09
中国剩余定理证明过程
2021-05-09
kafka告警简单方案
2021-05-09
SpringMvc @Validated注解执行原理
2021-05-09
java多线程执行问题
2021-05-09