题目:

题解:
class Solution:
def nextGreaterElement(self, n: int) -> int:
x, cnt = n, 1
while x >= 10 and x // 10 % 10 >= x % 10:
cnt += 1
x //= 10
x //= 10
if x == 0:
return -1
targetDigit = x % 10
x2, cnt2 = n, 0
while x2 % 10 <= targetDigit:
cnt2 += 1
x2 //= 10
x += x2 % 10 - targetDigit # 把 x2 % 10 换到 targetDigit 上
MAX_INT = 2 ** 31 - 1
for i in range(cnt): # 反转 n 末尾的 cnt 个数字拼到 x 后
d = n % 10 if i != cnt2 else targetDigit
# 为了演示算法,请读者把 x 视作一个 32 位有符号整数
if x > MAX_INT // 10 or x == MAX_INT // 10 and d > 7:
return -1
x = x * 10 + d
n //= 10
return x

被折叠的 条评论
为什么被折叠?



