题解 | #下一个更大的数(三)#

下一个更大的数(三)

http://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199

public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int nextGreaterElement(int n) {
        // write code here
        vector<int> nums = toArry(n);
        nextPermutation(nums);
        int ans = toInt(nums);
        return ans == n ? -1 : ans;
    }
    
private:
    vector<int> toArry(int n) {
        vector<int> ans;
        
        while (n) {
            ans.insert(ans.begin(), n%10);
            n /= 10;
        }
        
        return ans;
    }
    
    int toInt(const vector<int>& nums) {
        int ans = 0;
        
        for (int i=0; i<nums.size(); ++i) {
            ans = ans * 10 + nums[i];
        }
        
        return ans;
    }
    
    void nextPermutation(vector<int>& nums) {
        int index = -1;
        // 从后往前找第一个小于后面数的索引位置
        for (int i=nums.size()-2; i>=0; --i) {
            if (nums[i] < nums[i+1]) {
                index = i;
                break;
            }
        }
        
        if (index >= 0) {
            // 从后往前找,第一个大于
            for (int i=nums.size()-1; i>index; --i) {
                if (nums[i] > nums[index]) {
                    swap(nums[index], nums[i]);
                    ++index;
                    break;
                }
            }
            reverse(nums.begin() + index, nums.end());
        }
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务