当前位置:网站首页>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 !(づ。◕ᴗᴗ◕。)づ
边栏推荐
- Exercise 8-2 calculate the sum and difference of two numbers
- QT learning 23 layout manager (II)
- [combinatorics] permutation and combination (two counting principles, examples of set permutation | examples of set permutation and circle permutation)
- TS code automatically generates JS
- Exercise 6-1 classify and count the number of characters
- Solution to failure or slow downloading of electron when electron uses electron builder to package
- Exercise 8-8 moving letters
- 核酸修饰的金属有机框架药物载体|PCN-223金属有机骨架包载Ad金刚烷|ZIF-8包裹阿霉素(DOX)
- Canvas utility library fabric JS user manual
- Redis:字符串类型数据的操作命令
猜你喜欢
Leetcode(4)——寻找两个正序数组的中位数
28: Chapter 3: develop Passport Service: 11: define attributes in the configuration file, and then obtain them in the code;
Exercise 6-1 classify and count the number of characters
信创产业现状、分析与预测
Fabric. JS document
Exercise 8-8 moving letters
[Jilin University] information sharing of postgraduate entrance examination and re examination
QT learning 25 layout manager (4)
FPGA测试方法以Mentor工具为例
[email protected]纳米颗粒)|纳米金属有机框架搭载雷帕霉素|科研试剂"/>
金属有机骨架材料ZIF-8包载姜黄素([email protected]纳米颗粒)|纳米金属有机框架搭载雷帕霉素|科研试剂
随机推荐
QT learning 23 layout manager (II)
Spring cup eight school league
JS Part 2
allegro,orcad, net alias,port,off-page connector之间的异同点和如何选取
Nucleic acid modified metal organic framework drug carrier | pcn-223 metal organic framework encapsulated ad adamantane | zif-8 encapsulated adriamycin (DOX)
Back to top implementation
Polestar美股上市:5.5万台交付如何支持得起超200亿美元估值
Exercise 8-8 moving letters
Page generation QR code
核酸修饰的金属有机框架药物载体|PCN-223金属有机骨架包载Ad金刚烷|ZIF-8包裹阿霉素(DOX)
7-10 calculate salary
Simulated access
天图投资冲刺港股:资产管理规模249亿 投了小红书与奈雪
How to use lxml to judge whether the website announcement is updated
selenium 浏览器(1)
Duet date picker (time plug-in that can manually enter the date)
【吉林大学】考研初试复试资料分享
FPGA test method takes mentor tool as an example
Cross linked cyclodextrin metal organic framework loaded methotrexate slow-release particles | metal organic porous material uio-66 loaded with flavonoid glycosides | Qiyue
JVM object lifecycle