字符串排列和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字符串的排列的更多相关文章

  1. 剑指Offer——字符串的排列

    题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...

  2. 用js刷剑指offer(字符串的排列)

    题目描述 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入 ...

  3. 【LeetCode】137. 只出现一次的数字 II(剑指offer 56-II)

    137. 只出现一次的数字 II(剑指offer 56-II) 知识点:哈希表:位运算 题目描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 .请你找出并返回 ...

  4. 剑指offer28 字符串的排列

    1.全局变量可以在最后去定义并初始化,不一定非要在开头 2.此题有一种特殊情况需要考虑,比如字符串是“aa”,那输出应该是“aa”,而不是“aa,aa”,即相同的不输出.实现这个处理用了c++中的容器 ...

  5. 154. Find Minimum in Rotated Sorted Array II(剑指offer)

    Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...

  6. 剑指offer字符串列表

    字符串 面试题5:替换空格 面试题20:表示数值的字符串 面试题58:翻转字符串 面试题58(二):左旋转字符串

  7. 剑指offer字符串1

    面试题5:替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solu ...

  8. 剑指Offer——字符串的排序

    Question 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描 ...

  9. 剑指offer--9.字符串的排列

    next_permutation(),还是那个feel ------------------------------------------------------------------------ ...

随机推荐

  1. Ajax实现的城市二级联动一

    前一篇是把省份和城市都写在JS里,这里把城市放在PHP里,通过发送Ajax请求城市数据渲染到页面. 1.html <select id="province"> < ...

  2. Python全栈学习_day003知识点

    今日大纲: . 基础数据类型 总览 . int . bool . str . for循环 1. 基础数据类型 总览 int: 用于计算,计数等 str:'这些内容',用户少量数据的存储,便于操作 bo ...

  3. userDefineFunc.js

    var scareMe = function(){ console.log("cynthia") scareMe = function(){ console.log("w ...

  4. kubectl 常用命令总结

    # 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 kubectl get pod kubectl get pod -n kube # 查看 RC 和 service ...

  5. 【读书笔记】iOS-音频设备访问

    音频的输入是通过麦克风实现,音频的输出是通过扬声气实现的.在iOS系统中无法直接操控麦克风和扬声器,苹果提供了丰富的音频API. 一,音频API介绍 在iOS和Mac OS X上开发音频应用,主要有两 ...

  6. CSS字体超出两行省略

    text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-w ...

  7. CSS基本知识(慕课网)

    1.注释 注解:CSS中注释/*这里是注释的文字*/   HTML中注释<!--这里是注释的文字--> 2.外部式css样式,写在单独的一个文件中 注解: 外部式css样式(也可称为外联式 ...

  8. js replace替换 忽略大小写问题

    实现就是控制台的内容“abc”,但是后台返回的是“ABC”,这个时候在前台遍历,需要将后台返回的在控制台标红. 当然控制台可以是 abc Abc等大小写混合,以下代码都可替换. var flagnew ...

  9. C# winform三种定时方法

    1. 直接用winform 的 timers 拖控件进去 代码 public partial class Form1 : Form     {         public Form1()       ...

  10. Linux下mysql5.7数据库root登录的问题

    本文最后修改时间:20180313 root默认为空密码,默认远程无法登录. mysql5.7更新了user表,网上的方法试了很多,都有点问题 #先停止MySQL服务 $ sudo service m ...