leetcode556—— Next Greater Element III (JAVA)

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);
    }
相關文章
相關標籤/搜索