当前位置:网站首页>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
- Redis: redis data structure and key operation commands
- 叶酸修饰的金属-有机骨架(ZIF-8)载黄芩苷|金属有机骨架复合磁性材料([email protected])|制备路线
- Common plug-ins for vite project development
- Print. JS -- web page file printing
- 玖逸云黑免费无加密版本源码
- Simulated access
- JVM垃圾回收机
- Concat and concat_ Ws() differences and groups_ Use of concat() and repeat() functions
- 28: Chapter 3: develop Passport Service: 11: define attributes in the configuration file, and then obtain them in the code;
猜你喜欢

QT learning 25 layout manager (4)

Implementation of Muduo asynchronous logging

Leetcode (4) -- find the median of two positively ordered arrays

Metal organic framework MOFs loaded with non steroidal anti-inflammatory drugs | zif-8 wrapped Prussian blue loaded quercetin (preparation method)

QT learning 19 standard dialog box in QT (top)

concat和concat_ws()区别及group_concat()和repeat()函数的使用

JVM class loading

TS code automatically generates JS

Spring cup eight school league

Why are grass-roots colleges and universities with "soil and poverty" called "Northeast small Tsinghua"?
随机推荐
Polestar美股上市:5.5万台交付如何支持得起超200亿美元估值
Exercise 8-2 calculate the sum and difference of two numbers
The small project (servlet+jsp+mysql+el+jstl) completes a servlet with login function, with the operation of adding, deleting, modifying and querying. Realize login authentication, prevent illegal log
Raft 协议
中国PETG市场预测及战略研究报告(2022版)
Canvas utility library fabric JS user manual
6-9 statistics of single digits (15 points)
Toast UI editor (editor allows you to edit your markup document using text or WYSIWYG, with syntax highlighting, scrolling synchronization, real-time preview and chart functions.)
Learn to punch in today
牛客网:过河卒
[clean up the extraordinary image of Disk C]
JVM object lifecycle
金属有机骨架材料ZIF-8包载姜黄素([email protected]纳米颗粒)|纳米金属有机框架搭载雷帕霉素|科研试剂
Exercise 8-7 string sorting
Use vscode to view hex or UTF-8 codes
3D vision - 2 Introduction to pose estimation - openpose includes installation, compilation and use (single frame, real-time video)
Reflection -- basic usage
Eight sorts
叶酸修饰的金属-有机骨架(ZIF-8)载黄芩苷|金属有机骨架复合磁性材料([email protected])|制备路线
Redis:字符串类型数据的操作命令