当前位置:网站首页>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 !(づ。◕ᴗᴗ◕。)づ
边栏推荐
- Nucleic acid modified metal organic framework drug carrier | pcn-223 metal organic framework encapsulated ad adamantane | zif-8 encapsulated adriamycin (DOX)
- Configure stylelint
- allegro,orcad, net alias,port,off-page connector之间的异同点和如何选取
- FPGA test method takes mentor tool as an example
- Uniapp tips - set background music
- Page generation QR code
- Interface for querying IP home
- jvm-类加载
- 28: Chapter 3: develop Passport Service: 11: define attributes in the configuration file, and then obtain them in the code;
- 1px problem of mobile terminal
猜你喜欢
小项目(servelt+jsp+mysql+EL+JSTL)完成一个登录功能的Servlet,具有增删改查的操作。实现登录身份验证,防止非法登录,防止多点登录,记住用户名密码功能。
[email protected] Nanoparticles) | nano metal organic framework carry"/>
Metal organic framework material zif-8 containing curcumin( [email protected] Nanoparticles) | nano metal organic framework carry
Understanding of closures
FPGA test method takes mentor tool as an example
[email"/>
Folic acid modified metal organic framework (zif-8) baicalin loaded metal organic framework composite magnetic material (AU- [email
allegro,orcad, net alias,port,off-page connector之间的异同点和如何选取
Use vscode to view hex or UTF-8 codes
Redis:Redis的数据结构、key的操作命令
消息订阅与发布
Comprehensive case of MySQL data addition, deletion, modification and query
随机推荐
JS general form submission 1-onsubmit
PCB中常用快捷键
常见问题之PHP——ldap_add(): Add: Undefined attribute type in
QT learning 25 layout manager (4)
Spring cup eight school league
Uniapp skills - scrolling components -1
Qt学习21 Qt 中的标准对话框(下)
Generate directories from web content
Solution to failure or slow downloading of electron when electron uses electron builder to package
Simulated access
How to use lxml to judge whether the website announcement is updated
Uniapp tips - scrolling components
消息订阅与发布
Exercise 6-2 using functions to sum special A-string sequences
JVM object lifecycle
Uniapp tips - set background music
Selenium browser (1)
Learn to punch in today
泰凌冲刺科创板:拟募资13亿 国家大基金与小米长江是股东
Why don't I have a rookie medal