题目
给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。
示例 1:
输入:n = 12
输出:21
示例 2:
输入:n = 21
输出:-1
提示:
1 <= n <= 231 - 1
一、想法
这道题看到的时候有些熟悉,但还是不知道怎么做,我连最基本的将int转换成字符串数组都忘了,很尴尬,这道题我想到用数字按照位进行交换,但是不知道用什么规则,我就看了下答案,答案想法是先找到第一个前面的数字大于后面的数字left(就是逆序),在找到它右边大于当前坐标的数字right,将左边那个数字和右边数字进行交换,最后 再将left+1一直到最后的元素进行排序,。我当时还看了评论,看了一会,发现这道题和31题相似,所以看了下3题。31题和这题一样,多了一点可能有的数字会返回-1,这点31题没有。
二、代码
将31题的代码更改一下就可以,官方的答案反而有一些绕。
所以改了31题的代码:
class Solution {
public int nextGreaterElement(int n) {