給定乙個32位正整數 n,你需要找到最小的32位整數,其與 n 中存在的位數完全相同,並且其值大於n。如果不存在這樣的32位整數,則返回-1。
示例 1:
輸入: 12
輸出: 21
示例 2:
輸入: 21
輸出: -1
示例 1:
輸入: 12
輸出: 21
示例 2:
輸入: 21
輸出: -1
思路:剛開始想到的都是數字排序後,取大於n的即可。即方法一.
後看了大神的解法,於是記下方法二。
方法一:
public
intnextgreaterelement
(int n)
}return-1
;}public
void
combine
(list
list,
char
chars,
int[
] nums,stringbuilder sb)
for(
int j =
0;j < chars.length;j++
) nums[j]=1
; sb.
(chars[j]);
combine
(list,chars,nums,sb)
; nums[j]=0
; sb.
deletecharat
(sb.
length()
-1);
}}
方法二的思路是:
將數字轉為char字元陣列.
如果從數字的右邊往左遍歷的過程中,都沒找nums[j-1]class
solution
if(i ==0)
return-1
;int min = chars[i-1]
-'0'
;int smallest = i;
for(j = i+
1;j < chars.length;j++)}
char temp = chars[smallest]
; chars[smallest]
= chars[i-1]
; chars[i-1]
= temp;
arrays.
sort
(chars,i,chars.length)
;long nums = long.
valueof
(new
string
(chars));
return nums<=integer.max_value?
(int
)nums:-1;}}
leetcode 556 下乙個更大元素 III
給你乙個正整數 n 請你找出符合條件的最小整數,其由重新排列 n 中存在的每位數字組成,並且其值大於 n 如果不存在這樣的正整數,則返回 1 注意 返回的整數應當是乙個 32 位整數 如果存在滿足題意的答案,但不是 32 位整數 同樣返回 1 示例 1 輸入 n 12 輸出 21 示例 2 輸入 n...
556 下乙個更大元素 III
給定乙個32位正整數n,你需要找到最小的32位整數,其與n中存在的位數完全相同,並且其值大於n。如果不存在這樣的32位整數,則返回 1。class solution return int result return nextarray array public long nextarray int ...
LeetCode 下乙個排列
實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...