力扣OJ 556. 下一个更大元素 III (整数和字符串互相转化)

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

示例 1:

输入: 12
输出: 21
示例 2:

输入: 21
输出: -1

 

char* itoa(int num,char* str,int radix)  //copy from 百度百科
{/*索引表*/
    char index[]="0123456789ABCDEF";
    unsigned unum;/*中间变量*/
    int i=0,j,k;
    /*确定unum的值*/
    if(radix==10&&num<0)/*十进制负数*/
    {
        unum=(unsigned)-num;
        str[i++]='-';
    }
    else unum=(unsigned)num;/*其他情况*/
    /*转换*/
    do{
        str[i++]=index[unum%(unsigned)radix];
        unum/=radix;
       }while(unum);
    str[i]='\0';
    /*逆序*/
    if(str[0]=='-')
        k=1;/*十进制负数*/
    else
        k=0;
     
    for(j=k;j<=(i-1)/2;j++)
    {       char temp;
        temp=str[j];
        str[j]=str[i-1+k-j];
        str[i-1+k-j]=temp;
    }
    return str;
}
class Solution {
public:
    int nextGreaterElement(int n) {
        char sn[40];
        itoa(n,sn,10);
        int len=strlen(sn);
        for(int i=len-2;i>=0;i--)
        {
            if(sn[i]>=sn[i+1])continue;
            for(int j=len-1;j>i;j--)
            {
                if(sn[i]>=sn[j])continue;                
                sn[j]^=sn[i]^=sn[j]^=sn[i];
                sort(sn+i+1,sn+len);
                long long res = atol(sn);
                if(res==int(res))return res;
                return -1;
            }
        }
        return -1;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章