Advertisement
sweet1cris

Untitled

Jan 9th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.30 KB | None | 0 0
  1. public class Solution {
  2.     /**
  3.      * @param num: an array of integers
  4.      * @return: return nothing (void), do not return anything, modify num in-place instead
  5.      */
  6.      
  7.     public void reverse(int[] num, int start, int end) {
  8.         for (int i = start, j = end; i < j; i++, j--) {
  9.             int temp = num[i];
  10.             num[i] = num[j];
  11.             num[j] = temp;
  12.         }
  13.     }
  14.    
  15.     public void nextPermutation(int[] num) {
  16.         // find the last increase index
  17.         int index = -1;
  18.         for (int i = num.length - 2; i >= 0; i--) {
  19.             if (num[i] < num[i + 1]) {
  20.                 index = i;
  21.                 break;
  22.             }
  23.         }
  24.         if (index == -1) {
  25.             reverse(num, 0, num.length - 1);
  26.             return;
  27.         }
  28.        
  29.         // find the first bigger one
  30.         int biggerIndex = index + 1;
  31.         for (int i = num.length - 1; i > index; i--) {
  32.             if (num[i] > num[index]) {
  33.                 biggerIndex = i;
  34.                 break;
  35.             }
  36.         }
  37.  
  38.         // swap them to make the permutation bigger
  39.         int temp = num[index];
  40.         num[index] = num[biggerIndex];
  41.         num[biggerIndex] = temp;
  42.        
  43.         // reverse the last part
  44.         reverse(num, index + 1, num.length - 1);
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement