博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode - Permutations I,II
阅读量:5789 次
发布时间:2019-06-18

本文共 2450 字,大约阅读时间需要 8 分钟。

全排列问题是回溯的典型例题:

1.可行解的组成形式是给定数组中的所有数的组合,故而大小上可以作为可行解判定条件
2.每次需要在剩下可被选中的集合中选择一个,创建mask数组

class Solution {public:    void dfs(vector
> &vct, vector
&cur, vector
& nums,vector
& used) { if (cur.size() == nums.size()) { vct.push_back(cur); return; } for (int i = 0; i < nums.size(); ++i) { if (used[i] == 0) { cur.push_back(nums[i]); used[i] = 1; dfs(vct, cur, nums, used); used[i] = 0; cur.pop_back(); } } } vector
> permute(vector
& nums) { vector
> vct; int n = nums.size(); if (n <= 0) return vct; vector
cur; vector
used(n, 0); dfs(vct, cur, nums, used); return vct; }};

diff : 需要考虑val1 = val2 的情况,需要sort将相同元素聚类,然后可以参考前文 去重的方法

class Solution {public:    void dfs(vector
> &vct, vector
&cur, vector
& nums, vector
& used) { if (cur.size() == nums.size()) { vct.push_back(cur); return; } for (int i = 0; i < nums.size(); ++i) { if (used[i] == 0) { int pre_index = i - 1; bool repeated = false; while (pre_index >= 0 && nums[pre_index] == nums[i]) { if (used[pre_index] == 0) { repeated = true; break; } --pre_index; } if (repeated) continue; cur.push_back(nums[i]); used[i] = 1; dfs(vct, cur, nums, used); used[i] = 0; cur.pop_back(); } } } vector
> permuteUnique(vector
& nums) { vector
> vct; vector
cur; int n = nums.size(); if (n <= 0) return vct; vector
used(n, 0); dfs(vct, cur, nums, used); return vct; }};

转载地址:http://xgmyx.baihongyu.com/

你可能感兴趣的文章
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
L104
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>
商教助手!解析夏普液晶高清宽屏投影机系列
查看>>
云南去年有望实现151万贫困人口净脱贫
查看>>
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>