31. Next Permutation | Java最短代码实现
2016-03-24 17:39
627 查看
原题链接:31. Next Permutation
【思路】
首先,我们来了解一下——字典序法:
C++的STL库里面有nextPermutation()方法,其实现就是字典序法。
下图简单明了地介绍了字典序法
例如,1234的全排列如下:
简单归纳,从右边开始,找到第一个正序数 nums[i] ,然后从右边找第一个大于 num[i] 的数 nums[j](j > i),找到之后交换 nums[i] 和 nums[j] ,最后将 nums[i + 1] 至 nums[nums.length - 1]之间的数进行反转:
cases passed. Runtime: 2
ms Your runtime beats 9.15% of javasubmissions.
欢迎优化!
【思路】
首先,我们来了解一下——字典序法:
C++的STL库里面有nextPermutation()方法,其实现就是字典序法。
下图简单明了地介绍了字典序法
例如,1234的全排列如下:
简单归纳,从右边开始,找到第一个正序数 nums[i] ,然后从右边找第一个大于 num[i] 的数 nums[j](j > i),找到之后交换 nums[i] 和 nums[j] ,最后将 nums[i + 1] 至 nums[nums.length - 1]之间的数进行反转:
public void nextPermutation(int[] nums) { for (int i = nums.length - 2; i >= 0; i--) if (nums[i] < nums[i + 1]) for (int j = nums.length - 1; j > i; j--) if (nums[i] < nums[j]) { swap(nums, i, j); reverse(nums, i + 1, nums.length - 1); return; } reverse(nums, 0, nums.length - 1); } private void swap(int[] nums, int left, int right) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; } private void reverse(int[] nums, int left, int right) { while (left < right) swap(nums, left++, right--); }265 / 265 test
cases passed. Runtime: 2
ms Your runtime beats 9.15% of javasubmissions.
欢迎优化!
相关文章推荐
- Java基本知识之三(多线程)
- 【JAVA】修改项目包名
- Java——复选框:JCheckBox
- java中触发器CronTrigger表达式的配置
- MyEclipse------各种问题解决方法
- Spring
- Java this 关键字返回当前类实例变量
- java在代码中获取Spring的bean的几种方式
- MyEclipse------如何添加jspsmartupload.jar+文件上传到服务器
- java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片
- android使用andFix增量更新,在ubuntu系统下,Eclipse版本
- MySQL------如何安装mysql-connector-java-5.1.38.zip
- 礼拜四log~java函数replaceAll报错解决方案 & 一些常用jq方法 & java函数addAll
- JAVA中的反射机制
- 使用Eclipse构建Maven项目 (step-by-step)
- 聊聊并发-Java中的Copy-On-Write容器
- 监控Java的GC状态
- Eclipse项目导入AS(Android Studio)
- 深入研究java.lang.ThreadLocal类
- 聊聊并发(七)——Java中的阻塞队列