556.下一个更大元素 III
【LetMeFly】4步讲完:556.下一个更大元素 III
力扣题目链接:https://leetcode.cn/problems/next-greater-element-iii/
给你一个正整数 n
,请你找出符合条件的最小整数,其由重新排列 n
中存在的每位数字组成,并且其值大于 n
。如果不存在这样的正整数,则返回 -1
。
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1
。
示例 1:
输入:n = 12 输出:21
示例 2:
输入:n = 21 输出:-1
提示:
1 <= n <= 231 - 1
方法一:模拟
其实就是求数字对应字符串的下一个全排列,方法也很简单(4步):
从后往前看,找到第一个“后面有大于它的数”的数(记为s[i] = x)
在s[i ~ 最后]中找到最小的大于x的数(记为s[j] = y)
交换s[i]和s[j]
在s[i+1 ~ 最后]范围内从小到大排序
然后返回字符串对应的数字即可
- 时间复杂度$O(N^2)$,其中$N$是数字的位数($N\leq 10$)
- 空间复杂度$O(N\log N)$,空间复杂度主要是排序所致
AC代码
C++
1 |
|
小小记录一下嘿嘿
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125582351
556.下一个更大元素 III
https://blog.letmefly.xyz/2022/07/03/LeetCode 0556.下一个更大元素III/