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.
Example 1:
Input: 12 Output: 21
Example 2:
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); }