Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive 32-bit integer exists, you need to return -1.git
Example 1:
數組
Input: 12 Output: 21
Example 2:
spa
Input: 21 Output: -1
轉載註明出處:http://www.cnblogs.com/wdfwolf3/,謝謝。
時間複雜度O(n),空間複雜度O(n),5ms。
public int nextGreaterElement(int n){ //若是是1位整數,直接返回-1,同時加上了10和11 if(n <= 11){ return -1; } //轉化爲char數組,方便處理數字 char[] nums = (n+"").toCharArray(); int i = nums.length - 2; //從後往前找到第一個升序的位數 for (; i >= 0; i--) { if (nums[i] < nums[i+1]) { break; } } //若是沒有即不存在,返回-1 if(i < 0){ return -1; } int j = nums.length -1; //從後往前查找第一個比i大的數字,這樣找出來的是全部大於i數字中的最小值 for (; j > i; j--) { if(nums[i] < nums[j]){ break; } } //交換i,j位置的數字 char tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; //i以後的數字排序,讓結果最小 Arrays.sort(nums, i, nums.length); //有可能交換後越界,使用long類型判斷一下 long ans = Long.parseLong(new String(nums)); return (ans>Integer.MAX_VALUE)?-1:((int)ans); }