当前位置:网站首页>Thinking about the arrangement problem in the backtracking problem (leetcode questions 46 and 47)
Thinking about the arrangement problem in the backtracking problem (leetcode questions 46 and 47)
2022-07-03 14:13:00 【Hurri_ cane】
Thinking about the arrangement problem in the backtracking problem ( Cattle from 46 Question and 47 topic ),Python Realization
1. Configuration environment
Usage environment :python3.7
platform :Windows10
IDE:PyCharm
2. The origin of blog
Bloggers are brushing LeetCode I have a little thought about the full arrangement problem , Record here .
3. Problem description
array 、 The key problem in combinatorial problems is de duplication , The common method is to adopt used Array for de duplication , But this may not be the best way , With LeetCode46 For example

4. Common methods
Take the method provided by the code Capriccio as an example
Method 1 : use usage_list Array to record , Every time you enter backtracking (backtracking) If yes, you can judge whether to use the modified element , So as to achieve weight removal .
class Solution:
def __init__(self):
self.path = []
self.paths = []
def permute(self, nums: List[int]) -> List[List[int]]:
usage_list = [False] * len(nums)
self.backtracking(nums, usage_list)
return self.paths
def backtracking(self, nums: List[int], usage_list: List[bool]) -> None:
# Base Case Find the leaf node
if len(self.path) == len(nums):
self.paths.append(self.path[:])
return
# Single layer recursive logic
for i in range(0, len(nums)): # Search from scratch
# If self.path The elements included in , skip
if usage_list[i] == True:
continue
usage_list[i] = True
self.path.append(nums[i])
self.backtracking(nums, usage_list) # Vertical transmission of usage information , duplicate removal
self.path.pop()
usage_list[i] = False
Method 2 : lose usage_list, use self.path Instead of , But the thought of weight removal still lies in judgment num[i] Whether it appears in the record , If so, just continue fall
class Solution:
def __init__(self):
self.path = []
self.paths = []
def permute(self, nums: List[int]) -> List[List[int]]:
self.backtracking(nums)
return self.paths
def backtracking(self, nums: List[int]) -> None:
# Base Case Find the leaf node
if len(self.path) == len(nums):
self.paths.append(self.path[:])
return
# Single layer recursive logic
for i in range(0, len(nums)): # Search from scratch
# If self.path The elements included in , skip
if nums[i] in self.path:
continue
self.path.append(nums[i])
self.backtracking(nums)
self.path.pop()
5. My thinking
Ideas :
Whether to use usage_list still self.path It's all about recording element usage through a container , During recursion , Judge all elements once , For the use of elements continue operation .
Perhaps there is a more direct method of weight removal , Enter through control backtracking Of nums Array , Direct pair nums Array for de duplication , Let in backtracking Of nums It has been removed , In the use of for When traversing between layers , You can directly skip the elements being used , The specific operation is as follows :
# author:Hurricane
# date: 2022/7/2
# E-mail:[email protected]
class Solution:
def permute(self, nums):
self.path = []
self.res = []
self.backtracking(nums, len(nums))
return self.res
def backtracking(self, nums, length):
if len(self.path) == length:
self.res.append(self.path[:])
return
for i in range(len(nums)):
self.path.append(nums[i])
self.backtracking(nums[0:i] + nums[i + 1:], length)
self.path.pop()
The core code is
self.backtracking(nums[0:i] + nums[i + 1:], length)
This line of code controls the entry backtracking The elements of , Enter directly from backtracking The source of the finished heavy ,
6. Other similar topics
about LeetCode47 Questions can also be carried out with the same idea 
Here is also the way bloggers think
# author:Hurricane
# date: 2022/7/2
# E-mail:[email protected]
class Solution:
def permuteUnique(self, nums):
self.path = []
self.res = []
nums.sort()
self.backtracking(nums, len(nums))
return self.res
def backtracking(self, nums, length):
if len(self.path) == length:
self.res.append(self.path[:])
return
for i in range(len(nums)):
if i > 0 and nums[i] == nums[i - 1]:
continue
self.path.append(nums[i])
self.backtracking(nums[0:i] + nums[i + 1:], length)
self.path.pop()

7. reference
8. Conclusion
If this article is helpful to you 、 Collect and take away with one click , Your support is my greatest motivation !(づ。◕ᴗᴗ◕。)づ
边栏推荐
- 交联环糊精金属有机骨架负载甲氨蝶呤缓释微粒|金属-有机多孔材料UiO-66负载黄酮苷类药物|齐岳
- [combinatorics] permutation and combination (examples of combinatorial number of multiple sets | three counting models | selection problem | combinatorial problem of multiple sets | nonnegative intege
- Leetcode (4) -- find the median of two positively ordered arrays
- 天图投资冲刺港股:资产管理规模249亿 投了小红书与奈雪
- How to bold text in AI
- 【吉林大学】考研初试复试资料分享
- [clean up the extraordinary image of Disk C]
- 必贝特医药冲刺科创板:年营收97万亏损1.37亿 拟募资20亿
- MongoDB数据库入门的常用命令
- TS code automatically generates JS
猜你喜欢

7-11 calculation of residential water charges by sections

FPGA测试方法以Mentor工具为例

Redis: redis data structure and key operation commands

Scroll detection of the navigation bar enables the navigation bar to slide and fix with no content

Redis:字符串类型数据的操作命令

Exercise 10-8 recursive implementation of sequential output of integers

Uniapp tips - scrolling components

3D vision - 2 Introduction to pose estimation - openpose includes installation, compilation and use (single frame, real-time video)
[email protected])"/>金属有机骨架(MOFs)抗肿瘤药载体|PCN-223装载甲硝唑|UiO-66包载盐酸环丙沙星([email protected])

Exercise 10-6 recursively find Fabonacci sequence
随机推荐
Common mixins
【吉林大学】考研初试复试资料分享
Qt学习21 Qt 中的标准对话框(下)
Redis: redis data structure and key operation commands
Generate directories from web content
金属有机骨架材料ZIF-8包载姜黄素([email protected]纳米颗粒)|纳米金属有机框架搭载雷帕霉素|科研试剂
Why don't I have a rookie medal
How to delete an attribute or method of an object
Implementation of Muduo asynchronous logging
Uniapp skills - scrolling components -1
可编程逻辑器件软件测试
Current situation, analysis and prediction of information and innovation industry
战略、战术(和 OKR)
7-11 calculation of residential water charges by sections
JVM runtime data area
好看、好用、强大的手写笔记软件综合评测:Notability、GoodNotes、MarginNote、随手写、Notes Writers、CollaNote、CollaNote、Prodrafts、Noteshelf、FlowUs、OneNote、苹果备忘录
FPGA测试方法以Mentor工具为例
7-8 overspeed judgment
Understanding of closures
Exercise 9-3 plane vector addition