public void nextPermutation(int[] nums) { if(nums.length == 1) return; if(nums.length == 2) {swap(nums, 0, 1); return;} int len = nums.length; int index = len-2; for(; index >= 0; index --) { if(nums[index] < nums[index+1]) break; } if(index < 0) { reserve(nums, 0, len-1); return; } for(int i = len-1; i > index; i --) { if(nums[i] > nums[index]) { swap(nums, i, index); reserve(nums, index+1, len-1); return; } } } public void swap(int[] nums, int n, int m) { int tmp = nums[n]; nums[n] = nums[m]; nums[m] = tmp; } public void reserve(int[] nums, int n, int m) { while(n < m) swap(nums,n++,m--); }
近期评论