給定乙個數字列表,返回其所有可能的排列。
樣例給出乙個列表[1,2,3],其全排列為:
[[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]]挑戰
使用遞迴和非遞迴分別解決。
注意事項
你可以假設沒有重複數字。
思路一:遞迴
以[1,2,3,4]為例:
固定第乙個元素為1,剩下的問題便是求[2,3,4]的全排列;在[2,3,4]中,固定第乙個元素為2,便是求[3,4]的全排列;在[3,4]中,固定第乙個元素為3,則問題變為求[4]的全排列,即為自身。
剩下的情況,以此類推。作為一種遞迴的遞迴的思想,還是很容易想到的。
c++:
void per(vectornums , int start ,vector> &result)
else
per(nums,0,result);
return result;
}};
py3:
class solution:
"""@param: nums: a list of integers.
@return: a list of permutations.
"""def permute(self, nums):
# write your code here
start = 0
end = len(nums)
result =
if end==0 :
return
else :
self.per(nums,start,end,result)
return result
def per(self,nums,start,end,result):
if start==end:
else :
for i in range(start,end):
temp = nums[start]
nums[start] = nums[i]
nums[i] = temp
self.per(nums,start+1,end,result)
temp = nums[start]
nums[start] = nums[i]
nums[i] = temp
lintcode 全排列 帶重複元素的排列
全排列,用了子集樹的解法 class solution backtrack 0,nums return res bool isok int t return true void backtrack int t,vector nums for int i 0 i 帶重複元素的排列 篩選條件就是在i和t...
LintCode 16 帶重複的全排列
原題目 再上一題的基礎上做一點改動,就是判斷是不是已經有了。不過時間3084ms,略慢 class solution int book new int nums.length dfs nums,book,0,item,result return result public void dfs int ...
lintcode 排列序號
想法 1.對於四位數 4213 4 100 2 100 1 10 3 2.4個數的排列有4!種。當我們知道第一位數的時候,還有3!種方式,當知道第二位數時候還有2!種方式,當知道第三位數的時候還有1!種方式,前面三位數都確定的時候,最後一位也確定了。這裡是按照高位到地位的順序 3.對4個數的排列,各...