题目英文

Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]
Output:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
]

题目中文

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
]

算法实现

回溯法(back tracking) 是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

白话:回溯法可以理解为通过选择不同的岔路口寻找目的地,一个岔路口一个岔路口的去尝试找到目的地。如果走错了路,继续返回来找到岔路口的另一条路,直到找到目的地。

本练习的回溯过程如下所示:

public class Solution
{private IList<IList<int>> _result;private bool[] _used;public IList<IList<int>> Permute(int[] nums){_result = new List<IList<int>>();if (nums == null || nums.Length == 0)return _result;_used = new bool[nums.Length];FindPath(nums, 0, new List<int>());return _result;}public void FindPath(int[] nums, int count, List<int> path){if (count == nums.Length){//递归终止条件List<int> item = new List<int>();item.AddRange(path);//加入拷贝_result.Add(item);return;}for (int i = 0; i < nums.Length; i++){if (_used[i] == false){path.Add(nums[i]);_used[i] = true;FindPath(nums, count + 1, path);path.RemoveAt(path.Count - 1);_used[i] = false;}}}
}

实验结果

  • 状态:通过
  • 25 / 25 个通过测试用例
  • 执行用时: 364 ms, 在所有 C# 提交中击败了 80.00% 的用户
  • 内存消耗: 30.6 MB, 在所有 C# 提交中击败了 7.14% 的用户


相关图文

1. “数组”类算法

  • LeetCode实战:三数之和
  • LeetCode实战:最接近的三数之和
  • LeetCode实战:求众数
  • LeetCode实战:缺失的第一个正数
  • LeetCode实战:快乐数
  • LeetCode实战:寻找两个有序数组的中位数
  • LeetCode实战:盛最多水的容器
  • LeetCode实战:删除排序数组中的重复项
  • LeetCode实战:搜索旋转排序数组

2. “链表”类算法

  • LeetCode实战:两数相加
  • LeetCode实战:删除链表的倒数第N个节点
  • LeetCode实战:合并两个有序链表
  • LeetCode实战:合并K个排序链表
  • LeetCode实战:两两交换链表中的节点
  • LeetCode实战:旋转链表
  • LeetCode实战:环形链表

3. “栈”类算法

  • LeetCode实战:有效的括号
  • LeetCode实战:最长有效括号
  • LeetCode实战:逆波兰表达式求值

4. “队列”类算法

  • LeetCode实战:设计循环双端队列
  • LeetCode实战:滑动窗口最大值
  • LeetCode实战:整数反转
  • LeetCode实战:字符串转换整数 (atoi)

5. “递归”类算法

  • LeetCode实战:爬楼梯

6. “字符串”类算法

  • LeetCode实战:反转字符串
  • LeetCode实战:翻转字符串里的单词
  • LeetCode实战:最长公共前缀
  • LeetCode实战:字符串相加

7. “树”类算法

  • LeetCode实战:相同的树
  • LeetCode实战:对称二叉树
  • LeetCode实战:二叉树的最大深度
  • LeetCode实战:将有序数组转换为二叉搜索树

8. “哈希”类算法

  • LeetCode实战:两数之和

9. “搜索”类算法

  • LeetCode实战:搜索二维矩阵

10. “动态规划”类算法

  • LeetCode实战:最长回文子串

11. “数值分析”类算法

  • LeetCode实战:回文数
  • LeetCode实战:x 的平方根

LeetCode实战:全排列相关推荐

  1. LeetCode实战:排序链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...

  2. LeetCode实战:除自身以外数组的乘积

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...

  3. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  4. LeetCode实战:二叉搜索树中第K小的元素

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  5. LeetCode实战:LRU缓存机制

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Design and ...

  6. LeetCode实战:二叉搜索树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

  7. LeetCode实战:删除链表中的节点

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a fun ...

  8. LeetCode实战:反转链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...

  9. LeetCode实战:相交链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a pro ...

最新文章

  1. mysql之 表数据存放路径非datadir目录
  2. 设计模式--桥(Bridge)模式
  3. MyBatis延迟加载和缓存(4)
  4. 【我所认知的BIOS】—gt; uEFI AHCI Driver(5) — 第一个protocol最终要開始安装了
  5. nodejs 安装express
  6. php curl保存位置,php – 使用cURL从URL保存图像
  7. RemoteDebug iOS Webkit Adapter(适配器):一个可以让你(随时)随地调试Safari、 iOS WebView(的适配器)
  8. java反射获取实体类_java 反射获取类对象的三种方式
  9. Opencv单目标定flag的设定
  10. Sicily 1049. Mondriaan 解题报告
  11. 3dmax如何拆分模型_3dmax怎么拆分模型画贴图
  12. pytest_03_pycharm运行pytest (转:上海悠悠)
  13. 圈内著名ts_TS欠薪几百万遭实锤,阿泰被玩弄于股掌,权谋剧情比宫斗还精彩...
  14. 美国大通胀:谁来扛旗?
  15. Kubernetes 集群安全机制详解
  16. Java 水果排序
  17. 资金存管,专治各种预付无良商家卷款跑路
  18. Backbone:深层聚合网络:Deep Layer Aggregation(DLA)
  19. ffmpeg开发:打开摄像头和麦克风
  20. 计算服务器Centos 7.9 配置torque 6.1.2 单服务器

热门文章

  1. TNS-01201: Listener cannot find executable /u01/oracle/bin/extproc for SID orcl Listener failed to
  2. Java程序员技术培训需要培训哪些?
  3. 零基础怎么学习web前端开发
  4. 新手UI设计师必需要掌握的知识和技能
  5. linux 普通用户 mysql_Linux普通用户部署mysql
  6. Kafka背后公司获1.25亿融资,估值超25亿美元
  7. Eclipse for Tricore 的安装方法
  8. 统一客服消息返回错误:{errcode:43004,errmsg:require subscribe hint: [9Vv08633952]}
  9. 开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系
  10. 基础算法整理(1)——递归与递推