当前位置:网站首页>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 !(づ。◕ᴗᴗ◕。)づ
边栏推荐
- Formation of mil-100 (FE) coated small molecule aspirin [email protected] (FE) | glycyrrhetinic acid modified metal organ
- 中国PETG市场预测及战略研究报告(2022版)
- 必贝特医药冲刺科创板:年营收97万亏损1.37亿 拟募资20亿
- Print. JS -- web page file printing
- MySQL data processing value addition, deletion and modification
- Leetcode(4)——寻找两个正序数组的中位数
- [ACNOI2022]猜数
- 7-11 calculation of residential water charges by sections
- js 2023. String pair equal to the target string after connection
- 愉悦资本新双币基金近40亿元完成首次关账
猜你喜欢

jvm-对象生命周期

Exercise 6-6 use a function to output an integer in reverse order
![[Jilin University] information sharing of postgraduate entrance examination and re examination](/img/1d/550a991385b842a21e2b301725407e.png)
[Jilin University] information sharing of postgraduate entrance examination and re examination

Comprehensive case of MySQL data addition, deletion, modification and query

JVM class loading

Interface for querying IP home

Exercise 6-1 classify and count the number of characters

Concat and concat_ Ws() differences and groups_ Use of concat() and repeat() functions

金属有机骨架MOFs装载非甾体类抗炎药物|ZIF-8包裹普鲁士蓝负载槲皮素(制备方法)

Exercise 10-6 recursively find Fabonacci sequence
随机推荐
Exercise 6-2 using functions to sum special A-string sequences
28: Chapter 3: develop Passport Service: 11: define attributes in the configuration file, and then obtain them in the code;
JVM垃圾回收机
FPGA test method takes mentor tool as an example
中感微冲刺科创板:年营收2.4亿净亏1782万 拟募资6亿
JS shift operators (< <,> > and > > >)
Implementation of Muduo asynchronous logging
7-10 calculate salary
Leetcode (4) -- find the median of two positively ordered arrays
Scroll detection of the navigation bar enables the navigation bar to slide and fix with no content
MySQL data processing value addition, deletion and modification
Uniapp skills - scrolling components -1
Exercise 10-1 judge the three digits that meet the conditions
Metal organic framework (MOFs) antitumor drug carrier | pcn-223 loaded with metronidazole | uio-66 loaded with ciprofloxacin hydrochloride(
MongoDB数据库入门的常用命令
Comprehensive evaluation of good-looking, easy-to-use and powerful handwriting note taking software: notability, goodnotes, marginnote, handwriting, notes writers, collanote, collanote, prodrafts, not
JS matrix zero
Exercise 8-8 moving letters
JS general form submission 1-onsubmit
Page generation QR code