ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

556. Next Greater Element III

2020-03-04 13:05:17  阅读:268  来源: 互联网

标签:return Greater int 556 ii num jj III size


这道题要是有想法,还是能解决的。
题目要求:大约num,但是是大于num中最小的。同时数字个数和num一样。(要增加的最少)

例如,654321,就不存在。
3245321,对于从后往前递增部分,不存在更大的,因此无法修改。
但是对于非递增部分,第一个 4, 是可以修订的部分,要修订为【5,3,2,1】中,第一个大于4的值,也就是5.然后将4,5交互,3254321,大于num了,但不是大于中最小的,5不能动,5之后的4321从排序,1234, 3241234就是最后的结果。

class Solution {
public:
    
    bool isint(string num){
        string maxnum = "2147483647";
        if (num.size() == maxnum.size()){
            if (num > maxnum){
                return false;
            }
            else{
                return true;
            }
        }
        else if (num.size() < maxnum.size()){
            return true;
        }
        else{
            return false;
        }
    }
    
    
    
    // 最小整数,和n数字相同,同时取值>n
    //12345 => 12354
    //12344 => 12434
    int nextGreaterElement(int n) {
        string num = to_string(n);
        int jj = num.size()-2;
        while(jj>=0&&num[jj]>=num[jj+1]){
            jj --;
        }
        if (jj==-1){ // already max
            return -1;
        }
        
        // find min >s[jj],must find
        int ii = 0;
        for(ii=num.size()-1;ii>=jj+1;ii--){
            if (num[ii]>num[jj]){
                break;
            }
        }
        
        //swapii,jj
        char ch = num[ii];
        num[ii] = num[jj];
        num[jj] = ch;
        
        // sort [jj+1, end]
        int start = jj+1;
        int end = num.size()-1;
        while(start<end){
            char ch = num[start];
            num[start] = num[end];
            num[end] = ch;
            start++;
            end--;
        }

        if (isint(num)){
            return atoi(num.c_str());
        }
        else{
            return -1;
        }
    }
};

标签:return,Greater,int,556,ii,num,jj,III,size
来源: https://blog.csdn.net/zeroQiaoba/article/details/104651404

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有