Leetcode题库——46.全排列
@author: ZZQ
@software: PyCharm
@file: permute.py
@time: 2018/11/15 19:42
要求:给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
import copy
"""
思路一: DFS,去掉不满足条件的排列
"""
class Solution():
def __init__(self):
pass
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
ans = []
temp_ans = []
length = len(nums)
cur_length = 0
self.dfs(temp_ans, nums, cur_length, length, ans)
return ans
def dfs(self, temp_ans, nums, cur_length, length, ans):
if cur_length == length:
tt_ans = copy.deepcopy(temp_ans)
ans.append(tt_ans)
else:
for i in range(length):
if nums[i] not in temp_ans:
temp_ans.append(nums[i])
self.dfs(temp_ans, nums, cur_length+1, length, ans)
temp_ans.pop()
"""
思路二: 交换元素+DFS
"""
class Solution2():
def __init__(self):
pass
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums_len = len(nums)
ans = []
if nums_len == 0 or nums == []:
return []
self.exchange(nums, 0, nums_len, ans) # 采用前后元素交换的办法,dfs解题
return ans
def exchange(self, nums, i, len, ans):
if i == len-1: # 将当前数组加到结果集中
temp_list = []
for j in range(len):
temp_list.append(nums[j])
ans.append(temp_list)
return
# 将当前位置的数跟后面的数交换,并搜索解
for j in range(i, len):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
self.exchange(nums, i+1, len, ans)
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
Leetcode题库——46.全排列的更多相关文章
- Leetcode题库——47.全排列II
@author: ZZQ @software: PyCharm @file: permuteUnique.py @time: 2018/11/16 13:34 要求:给定一个可包含重复数字的序列,返回 ...
- leetcode题库
leetcode题库 #题名题解通过率难度出现频率 1 两数之和 46.5%简单2 两数相加 35.5%中等3 无重复字符的最长子串 31.1%中等4 寻找两个有序数组的中位 ...
- leetcode题库练习_数组中重复的数字
题目:数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次 ...
- leetcode题库解答源码(python3)
下面和大家分享本人在leetcode上已经ace的题目源码(python3): 本人会持续更新!- class Leetcode_Solution(object): def twoSum_1(self ...
- LeetCode题库整理(自学整理)
1. Two Sum 两数之和 来源:力扣(LeetCode) 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利 ...
- LeetCode题库13. 罗马数字转整数(c++实现)
问题描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ...
- Leetcode题库——36.有效的数独
@author: ZZQ @software: PyCharm @file: leetcode36_isValidSudoku.py @time: 2018/11/19 19:27 要求:判断一个 9 ...
- Leetcode题库——49.字母异位词分组【##】
@author: ZZQ @software: PyCharm @file: leetcode49_groupAnagrams.py @time: 2018/11/19 13:18 要求:给定一个字符 ...
- Leetcode题库——48.旋转图像
@author: ZZQ @software: PyCharm @file: rotate.py @time: 2018/11/16 15:41 要求:给定一个 n × n 的二维矩阵表示一个图像.将 ...
随机推荐
- Fedora 中多显示器环境下的工作区切换
[Dual monitor workspaces] 默认情况下,fedora中 Gnome 桌面环境在切换工作去的时候,只会在 Primary display 上切换, 其他显示器保持不变.如果要实现 ...
- dubbo接口访问控制
微服务背景下,一个web应用都可能不再service依赖,而是通过RPC调用远端服务器上的服务.这些服务里,就包括了一些不能轻易暴露的后台功能接口.暴露出去的dubbo接口注册到某一个zk上后,该du ...
- 垃圾回收相关(深入理解Java虚拟机中的内容)
程序计数器.虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收.垃圾回收主要是针对 Java 堆和方法区进行. 判断一个对 ...
- Tornado框架实现异步爬虫
from urllib.parse import urljoin from bs4 import BeautifulSoup from tornado import gen, httpclient, ...
- APR Recipe
1, pt fix 后生成的 icctcl,回到 icc source 后,如果需要eco_route,建议先关掉 timing_driven,因为 icc 与 pt 看到的 timing 情况一般 ...
- 用BCP从SQL Server 数据库中导出Excel文件
BCP(Bulk Copy Program)是一种简单高效的数据传输方式在SQL Server中,其他数据传输方式还有SSIS和DTS. 这个程序的主要功能是从数据库中查询Job中指定step的执行信 ...
- python+jenkins 构建节点环境编译器配置问题
python 编译器默认添加环境变量路径
- P1312 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- 20155217《网络对抗》Exp05 MSF基础应用
20155217<网络对抗>Exp05 MSF基础应用 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实践,如ms ...
- Compensating-Transaction模式
在应用中,会将一系列相关的操作定义为一个连续的操作,当其中一个或者多个步骤失败的时候,Compensating-Transaction模式会重置(回滚)这个连续的操作.在云应用中,这些需要保证一致性的 ...