当前位置:网站首页>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 !(づ。◕ᴗᴗ◕。)づ
边栏推荐
- MIL-100( Fe) 包裹小分子阿司匹林形成[email protected](Fe)|甘草次酸修饰金属有机框架材料UiO-66-NH2(简称UiO-66-NH2-GA)
- How to bold text in AI
- Rasp implementation of PHP
- js 2023. String pair equal to the target string after connection
- Vite project commissioning
- GRPC的四种数据流以及案例
- simpleParallax. JS (create poor visual effects for website pictures)
- Redis: commandes d'action pour les données de type chaîne
- Configure stylelint
- 金属有机骨架MIL-88负载阿霉素DOX|叶酸修饰UiO-66-NH2负载阿霉素[email protected]纳米粒子
猜你喜欢
[Jilin University] information sharing of postgraduate entrance examination and re examination
7-8 overspeed judgment
7-7 12-24 hour system
Redis: redis data structure and key operation commands
Redis: operation command of string type data
Redis: commandes d'action pour les données de type chaîne
Scroll detection, so that the content in the lower right corner is not displayed at the top of the page, but is displayed as the mouse slides
Exercise 10-2 recursive factorial sum
[email protected](Fe)|甘草次酸修饰金属有机框架材料UiO-66-NH2(简称UiO-66-NH2-GA)"/>
MIL-100( Fe) 包裹小分子阿司匹林形成[email protected](Fe)|甘草次酸修饰金属有机框架材料UiO-66-NH2(简称UiO-66-NH2-GA)
Understanding of closures
随机推荐
Scroll detection of the navigation bar enables the navigation bar to slide and fix with no content
QT learning 17 dialog box and its types
MongoDB索引
八大排序
[Jilin University] information sharing of postgraduate entrance examination and re examination
How to delete an attribute or method of an object
可编程逻辑器件软件测试
7-9 find a small ball with a balance
JVM垃圾回收机
Solution to failure or slow downloading of electron when electron uses electron builder to package
Global event bus
1px problem of mobile terminal
C library function - qsort()
关于回溯问题中的排列问题的思考(LeetCode46题与47题)
JVM class loading
MIL-100( Fe) 包裹小分子阿司匹林形成[email protected](Fe)|甘草次酸修饰金属有机框架材料UiO-66-NH2(简称UiO-66-NH2-GA)
QT learning 23 layout manager (II)
Rasp implementation of PHP
Invalid Z-index problem
Redis: commandes d'action pour les données de type chaîne