LintCode(十五) 全排列

2021-09-03 01:16:04 字數 1232 閱讀 7062

給定乙個數字列表,返回其所有可能的排列。

樣例給出乙個列表[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個數的排列,各...