最近还一直在刷leetcode,当然,更多时候只是将题解写在自己的电脑上,没有分享出来。偶尔想起来的时候,就写出来。
public class Solution { public void nextPermutation(int[] nums) { if(nums==null||nums.length<=1) return; nextPermutationHelp( nums,0,nums.length-1); } public void nextPermutationHelp(int []nums,int begin,int end){ int i=end; if((i>=1)&&(nums[i]>nums[i-1])) { // 1 2 3 4这类的 reverse(nums,i-1,i); return ; } for(i=end;i>=1;i--){ //1 2 4 3这类 if(nums[i]>nums[i-1]) { //从后往前扫描 break; } } reverse(nums,i,end); //如上面的1 2 4 3 ,先进行逆转,得到1 2 3 4 if(i>=1){ for(int j=i;j<=end;j++){ // 然后进行递增,找到比2大的第一个数,进行交换,最后得到 1 3 2 4 if(nums[j]>nums[i-1]) { int t=nums[i-1]; nums[i-1]=nums[j]; nums[j]=t; break; } } } } public void reverse(int[] nums,int begin,int end){ for(int i=begin,j=end;i<=(begin+end)/2;i++,j--){ int temp=nums[i]; nums[i]=nums[j]; nums[j]=temp; } } }
时间: 2024-10-05 13:22:25