力扣https://leetcode-cn.com/problems/permutations/给定一个不含重复数字的数组
nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案
class Solution:
def __init__(self):
self.re = []
self.res = []
def permute(self, nums: List[int]) -> List[List[int]]:
self.re.clear()
self.res.clear()
self.len_ = len(nums)
self.backtracing(nums)
return self.res
def backtracing(self,nums):
if len(self.re) == self.len_:
self.res.append(self.re[:])
return
for i in range(0,len(nums)):
self.re.append(nums[i])
self.backtracing(nums[0:i]+nums[i+1:])
self.re.pop()
在回溯函数中,通过将本层出现过的数字去除的方式实现去重的目的,使用同样的解法的另一题如下:(并不建议本题用回溯,只是为了练习回溯的写法)
力扣https://leetcode-cn.com/problems/count-numbers-with-unique-digits/给你一个整数
n
,统计并返回各位数字都不同的数字 x
的个数,其中 0 <= x < 10n
。
class Solution:
def __init__(self):
self.re = 0
self.num = '0123456789'
self.t = ''
def countNumbersWithUniqueDigits(self, n: int) -> int:
#回溯法
self.backtracing(self.num,0,n)
if n==0:return 1
return self.re - 1
def backtracing(self,num,startindex,n):
self.re+=1
if len(self.t) >= n:
return
# self.re+=1
for i in range(startindex,len(num)):
if self.t != '0' :
self.t = self.t + num[i]
self.backtracing(num[:i] + num[i+1:],0,n)
self.t = self.t[:-1]
else:
continue
返回值减一是因为第一个元素为空值.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/88921.html