leetcode 556 下乙個最大元素III

2021-09-29 09:43:44 字數 1446 閱讀 8095

給定乙個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...