LeetCode 31 Next Permutation(下一个全排列)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 31 Next Permutation(下一个全排列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:?https://leetcode.com/problems/next-permutation/?tab=Description Problem :尋找給定int數組的下一個全排列(要求:be in-place) 倒序查找到該數組中第一個滿足后面的數字大于前面的數字的下標i (當前下標 i 指向 后面的那個比較大的數) 參考代碼:? package leetcode_50;/**** * @author pengfei_zheng* 下一個全排列*/
public class Solution31 {public static void nextPermutation(int[] nums) {int len = nums.length;if(len<=1)return;int i = len - 1;for(;i>=1;i--){//從后先前遍歷if(nums[i]>nums[i-1]){//找到第一個后面的數字大于相鄰的前面的那個數的下標 (此時下標指向較大的那個數字)break;}}if(i!=0){swap(nums,i-1);//從后向前遍歷,交換第一個大于index=i-1的那個數
}reserver(nums,i);//將從下標i開始的數組進行從小到大的排序
}private static void swap(int[] nums, int i) {for(int j=nums.length-1;j>i;j--){//從后向前遍歷if(nums[j]>nums[i]){int t = nums[j];nums[j]=nums[i];nums[i]=t;break;//交換第一個比前面的index=i-1的那個數
}}}//從下標i開始到nums.length-1結束,實現從小到大排列private static void reserver(int[] nums, int i) {int first = i;int last = nums.length-1;while(first<last){int t = nums[first];nums[first]=nums[last];nums[last]=t;first++;last--;}}public static void main(String[]args){//int []nums={6,3,4,9,8,7,1};int []nums={1,2,4,3};nextPermutation(nums);for(int n:nums){System.out.print(n+" ");}}
}
?
轉載于:https://www.cnblogs.com/zpfbuaa/p/6531728.html
總結
以上是生活随笔為你收集整理的LeetCode 31 Next Permutation(下一个全排列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.Liunx 系统设置
- 下一篇: unix shell(壳)的简单实现