[556][中等][栈] 下一个更大元素 III
最后更新于
最后更新于
class Solution:
def nextGreaterElement(self, n: int) -> int:
digits = list(str(n))
stack = []
swap_index = -1
for i in range(len(digits) - 1, -1, -1):
# 发现当前值比栈顶元素小, pop栈顶元素直到栈顶不大于当前元素, 记录最后一个大于栈顶的元素位置
while stack and digits[i] < digits[stack[-1]]:
swap_index = stack.pop()
# 交换当前元素与之前大于它的最小值, 然后将后半部分逆序
if swap_index >= 0:
digits[i], digits[swap_index] = digits[swap_index], digits[i]
digits = digits[:i + 1] + digits[i + 1:][::-1]
num = int(''.join(digits))
return num if num < 1 << 32 - 1 else -1
# 单调递增栈, 记录索引
stack.append(i)
return -1