自学内容网 自学内容网

C语言 | Leetcode C语言题解之第556题下一个更大元素III

题目:

题解:

int nextGreaterElement(int n){
    int x = n, cnt = 1;
    for (; x >= 10 && x / 10 % 10 >= x % 10; x /= 10) {
        ++cnt;
    }
    x /= 10;
    if (x == 0) {
        return -1;
    }

    int targetDigit = x % 10;
    int x2 = n, cnt2 = 0;
    for (; x2 % 10 <= targetDigit; x2 /= 10) {
        ++cnt2;
    }
    x += x2 % 10 - targetDigit; // 把 x2 % 10 换到 targetDigit 上

    for (int i = 0; i < cnt; ++i, n /= 10) { // 反转 n 末尾的 cnt 个数字拼到 x 后
        int d = i != cnt2 ? n % 10 : targetDigit;
        if (x > INT_MAX / 10 || x == INT_MAX / 10 && d > 7) {
            return -1;
        }
        x = x * 10 + d;
    }
    return x;
}

原文地址:https://blog.csdn.net/m0_59237910/article/details/143670726

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!