leetcode46. Permutations 、47. Permutations II、 剑指offer字符串的排列
字符串排列和PermutationsII差不多
Permutations第一种解法:
这种方法从0开始遍历,通过visited来存储是否被访问到,level代表每次已经存储了多少个数字
时间复杂度O(n!)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
vector<bool> visited(nums.size(),);
int level = ;
permute(nums,result,res,visited,level);
return result;
}
void permute(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,vector<bool>& visited,int level){
if(level == nums.size()){
result.push_back(res);
return;
}
for(int i = ;i < nums.size();i++){
if(visited[i] == )
continue;
res.push_back(nums[i]);
visited[i] = ;
permute(nums,result,res,visited,level+);
res.pop_back();
visited[i] = ;
}
}
};
第二种解法:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
permute(nums,);
return res;
}
void permute(vector<int>& nums,int begin){
if(begin == nums.size() - )
res.push_back(nums);
for(int i = begin;i < nums.size();i++){
swap(nums[i],nums[begin]);
permute(nums,begin+);
swap(nums[i],nums[begin]);
}
}
vector<vector<int>> res;
};
Permutations II
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
vector<bool> visited(nums.size(),);
int level = ;
sort(nums.begin(),nums.end());
permute(nums,result,res,visited,level);
return result;
}
void permute(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,vector<bool>& visited,int level){
if(level == nums.size()){
result.push_back(res);
return;
}
for(int i = ;i < nums.size();i++){
if(visited[i] == )
continue;
if(i > && nums[i] == nums[i-] && visited[i-] == )
continue;
visited[i] = ;
res.push_back(nums[i]);
permute(nums,result,res,visited,level+);
res.pop_back();
visited[i] = ;
}
}
};
把第二个剪枝写在for循环一开始这种方式,实际上每次只存储重复数字中的第二个,相当于按照逆序的方式存储相同的数字

leetcode46. Permutations 、47. Permutations II、 剑指offer字符串的排列的更多相关文章
- 剑指Offer——字符串的排列
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...
- 用js刷剑指offer(字符串的排列)
题目描述 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入 ...
- 【LeetCode】137. 只出现一次的数字 II(剑指offer 56-II)
137. 只出现一次的数字 II(剑指offer 56-II) 知识点:哈希表:位运算 题目描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 .请你找出并返回 ...
- 剑指offer28 字符串的排列
1.全局变量可以在最后去定义并初始化,不一定非要在开头 2.此题有一种特殊情况需要考虑,比如字符串是“aa”,那输出应该是“aa”,而不是“aa,aa”,即相同的不输出.实现这个处理用了c++中的容器 ...
- 154. Find Minimum in Rotated Sorted Array II(剑指offer)
Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...
- 剑指offer字符串列表
字符串 面试题5:替换空格 面试题20:表示数值的字符串 面试题58:翻转字符串 面试题58(二):左旋转字符串
- 剑指offer字符串1
面试题5:替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solu ...
- 剑指Offer——字符串的排序
Question 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描 ...
- 剑指offer--9.字符串的排列
next_permutation(),还是那个feel ------------------------------------------------------------------------ ...
随机推荐
- R0~R16寄存器作用
R0-R3 用作传入函数参数,传出函数返回值.在子程序调用之间,可以将 r0-r3 用于任何用途. 被调用函数在返回之前不必恢复 r0-r3.如果调用函数需要再次使用 r0-r3 的内容,则它 ...
- elasticsearch6.7 05. Document APIs(3)GET API
2.GET API get API 可以通过文档id从索引中获取json格式的文档,以下示例从twitter索引中获取type为_doc,id值为0为的JSON文档: GET twitter/_doc ...
- Hash table: why size should be prime?
Question: Possible Duplicate:Why should hash functions use a prime number modulus? Why is it necessa ...
- 深入理解Java 8 Lambda(类库篇)
背景(Background) 自从lambda表达式成为Java语言的一部分之后,Java集合(Collections)API就面临着大幅变化.而 JSR 355(规定了 Java lambda 表达 ...
- 1145.cn 百度MIP适配实例
MIP,全称Mobile Instant Pages(移动端即时页面),是百度推出的一套移动端网页开放技术标准.网站移动端页面统计MIP改造,能实现页面缓存,从而达到移动网页加速效果. 百度官方已经明 ...
- flow-vue.js移动端效果
得益于vue.js和element,以及vue-element-extends在线表格编辑.前后端分离的后端用golang+beego框架,服务器采用腾讯云. vue的自适应做的很好,只要将侧栏加一行 ...
- 国网SGCC_UAP 反编译.class文件源代码
SGCC_UAP和eclipse操作方式差不多,对于用惯了IDEA和Android Studio的人来说非常不方便,按住Ctrl点击类名不能查看源码. 因为jar包下都是.class文件,所以需要安装 ...
- 【转】对cocos2d 之autorelease\ratain\release的理解
原文链接:http://blog.sina.com.cn/s/blog_4057ab6201018y4y.html Objective C内存管理进阶(二):理解autorelease: http:/ ...
- B-树、B+树
B-树 用来在外部存储中组织数据. 严格来说,2-3树.2-3-4树都是B-树的特例:但B树更强调它的节点有很多个子节点,B-树中的节点可以有几十或几百个子节点. B-树也可以是查找树,也可以不是查找 ...
- 【Java入门提高篇】Day33 Java容器类详解(十五)PriorityQueue详解
今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员——PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所耳闻吧,什么?没..没听过?emmm... ...