Leetcode回溯相关题目Python实现
2024-10-08 21:08:40
1、46题,全排列
https://leetcode-cn.com/problems/permutations/
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
n = len(nums)
results = []
def backtrack(first = 0):
if first == n:
results.append(nums[:])
return
for i in range(first, n):
nums[first], nums[i] = nums[i], nums[first]
backtrack(first + 1)
nums[first], nums[i] = nums[i], nums[first]
backtrack()
return results
2、47题,全排列二
https://leetcode-cn.com/problems/permutations-ii/
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
n = len(nums)
results = []
def backtrack(first = 0):
if first == n:
results.append(nums[:])
return
s = set()
for i in range(first, n):
if nums[i] in s:
continue
s.add(nums[i])
nums[first], nums[i] = nums[i], nums[first]
backtrack(first + 1)
nums[first], nums[i] = nums[i], nums[first]
backtrack()
return results
3、51题,N皇后
https://leetcode-cn.com/problems/n-queens/
class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
results = []
result = ["." * n] * n
l = set()
c = set()
x = set()
y = set() def backtrack(first=0):
if first == n:
results.append(result[:])
return
for i in range(n):
if i in l or first in c or i - first in x or i + first in y:
continue
l.add(i), c.add(first), x.add(i - first), y.add(i + first)
result[i] = first * "." + "Q" + (n - first - 1) * "."
backtrack(first + 1)
l.remove(i), c.remove(first), x.remove(i - first), y.remove(i + first)
result[i] = n * "."
backtrack()
return results
4、52题,N皇后二
https://leetcode-cn.com/problems/n-queens-ii/
class Solution(object):
def totalNQueens(self, n):
"""
:type n: int
:rtype: int
"""
self.results = 0
l = set()
c = set()
x = set()
y = set() def backtrack(first=0):
if first == n:
self.results += 1
return
for i in range(n):
if i in l or first in c or i - first in x or i + first in y:
continue
l.add(i), c.add(first), x.add(i - first), y.add(i + first)
backtrack(first + 1)
l.remove(i), c.remove(first), x.remove(i - first), y.remove(i + first)
backtrack()
return self.results
最新文章
- HDU 3622 Bomb Game
- 解决String TestContext下使用junit4抛出异常(java.lang.NoClassDefFoundError)的问题
- git配置管理
- 关于OA中权限越级的问题
- UIView下使用Animation控制动画
- Java内存管理以及各个内存区域详解
- Mobie 有用的几个css js代码
- SQL Server数据转换【包括Geometry类型】的技巧总结
- Linux主机上发布java web应用
- (转)Vi命令详解
- 用分治法解决最近点对问题:python实现
- 7.10 break.c 程序
- CrossFire Round #481 div.3 978 打后感
- SharePoint Framework 企业向导(二)
- Socket buffer 调优相关
- 关于正则表达式的“\b”
- Android免费短信验证
- “Gogoing”改进方案
- C/S模式和B/S模式
- otl使用存储过程或是LEFT JOIN时提示输出类型未知的问题
热门文章
- PAT Basic 1017 A除以B (20) [数学问题-⼤整数运算]
- The mplot3d Toolkit
- 初次运行Git前的配置
- 93.QuerySet转换为SQL的条件:迭代,切片(指定步长),len函数,list函数,判断
- 吴裕雄--天生自然 pythonTensorFlow图形数据处理:windows操作系统安装指定版本的tensorflow
- MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】
- 一篇文章带你了解axios网络交互-Vue
- fatal: remote origin already exists.
- C# 元组
- Linux_列出文件和文件属性