Leetcode題庫 46 全排列

2022-05-20 23:47:41 字數 1709 閱讀 9208

@author: zzq

@software: pycharm

@file: permute.py

@time: 2018/11/15 19:42

要求:給定乙個沒有重複數字的序列,返回其所有可能的全排列。

示例:輸入: [1,2,3]

輸出:[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

import copy

"""思路一: dfs,去掉不滿足條件的排列

"""class solution():

def __init__(self):

pass

def permute(self, nums):

""":type nums: list[int]

:rtype: list[list[int]]

"""ans =

temp_ans =

length = len(nums)

cur_length = 0

self.dfs(temp_ans, nums, cur_length, length, ans)

return ans

def dfs(self, temp_ans, nums, cur_length, length, ans):

if cur_length == length:

tt_ans = copy.deepcopy(temp_ans)

else:

for i in range(length):

if nums[i] not in temp_ans:

self.dfs(temp_ans, nums, cur_length+1, length, ans)

temp_ans.pop()

"""思路二: 交換元素+dfs

"""class solution2():

def __init__(self):

pass

def permute(self, nums):

""":type nums: list[int]

:rtype: list[list[int]]

"""nums_len = len(nums)

ans =

if nums_len == 0 or nums == :

return

self.exchange(nums, 0, nums_len, ans) # 採用前後元素交換的辦法,dfs解題

return ans

def exchange(self, nums, i, len, ans):

if i == len-1: # 將當前陣列加到結果集中

temp_list =

for j in range(len):

return

# 將當前位置的數跟後面的數交換,並搜尋解

for j in range(i, len):

temp = nums[i]

nums[i] = nums[j]

nums[j] = temp

self.exchange(nums, i+1, len, ans)

temp = nums[i]

nums[i] = nums[j]

nums[j] = temp

LeetCode題解 46 全排列

leetcode中國,注意需要登入。給定乙個沒有重複數字的序列,返回其所有可能的全排列。輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 leetcode 給出本題難度中等。根據給出序列,列出全排列。根據樣例輸入資料 1,2,3 我去,這麼簡單,不就是回...

leetcode 46 全排列(回溯)

給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 核心的遞迴部分如下 for begin in range 0 n for i in range begin,n swap nums begin n...

LeetCode 46 全排列(回溯)

給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 類似題目 leetcode 996.正方形陣列的數目 回溯 剪枝 class solution void bt vector int nums,i...