實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。
如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。
必須原地修改,只允許使用額外常數空間。
以下是一些例子,輸入位於左側列,其相應輸出位於右側列。
1,2
,3 → 1,3
,23,
2,1 → 1,2
,31,
1,5 → 1,5
,1
// 題目需要翻譯一下 ,
比如當前 nums =[1
,2,3
]。這個數是123,找出1,2,3這3個數字排序可能的所有數,排序後,
比123大的那個數 也就是132
如果當前 nums =[3
,2,1
]。這就是1,2,3所有排序中最大的那個數,
那麼就返回1,2,3排序後所有數中最小的那個,也就是1,2,3
->[1
,2,3
]
看的官方題解 ,我咋就是沒有思路呢
class
solution
reverse
(nums,i);}
//從start對陣列進行交換
public
void
reverse
(int
nums ,
int start)
}//交換陣列位置
複雜度分析時間複雜度:o(n),在最壞的情況下,只需要對整個陣列進行兩次掃瞄。
空間複雜度:o(1),沒有使用額外的空間,原地替換足以做到。
LeetCode每日一題 下乙個排列
實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...
力扣 每日一題 31 下乙個排列 中等
實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...
31 下乙個排列(中等題)
題目描述 實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,...