《剑指offer》面试题38. 字符串的排列
问题描述
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
限制:
1 <= s 的长度 <= 8
代码(回溯)
注意使用set为vector去重的技巧:
class Solution {
public:
vector<string> permutation(string s) {
vector<string>ans;
string path;
vector<bool> flag(s.size(),false);
backtrack(s,path,ans,flag);
set<string> st(ans.begin(), ans.end());
ans.assign(st.begin(), st.end());
return ans;
}
void backtrack(string s,string &path,vector<string>&ans,vector<bool>&flag)
{
if(path.size() == s.size())
{
ans.push_back(path);
return;
}
for(int i = 0; i < s.size(); ++i)
{
if(!flag[i])
{
path.push_back(s[i]);
flag[i] = true;
backtrack(s,path,ans,flag);
flag[i] = false;
path.pop_back();
}
}
}
};
结果:
执行用时 :532 ms, 在所有 C++ 提交中击败了8.06%的用户
内存消耗 :38.6 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
先排序后序不用去重
class Solution {
public:
vector<string> permutation(string s) {
vector<string>ans;
string path;
vector<bool> flag(s.size(),false);
sort(s.begin(),s.end());
backtrack(s,path,ans,flag);
return ans;
}
void backtrack(string s,string &path,vector<string>&ans,vector<bool>&flag)
{
if(path.size() == s.size())
{
ans.push_back(path);
return;
}
for(int i = 0; i < s.size(); ++i)
{
//注意最后这个!flag[i-1]
if(i > 0 && s[i] == s[i-1] && !flag[i-1])
continue;
if(!flag[i])
{
path.push_back(s[i]);
flag[i] = true;
backtrack(s,path,ans,flag);
flag[i] = false;
path.pop_back();
}
}
}
};
结果:
执行用时 :116 ms, 在所有 C++ 提交中击败了59.19%的用户
内存消耗 :18 MB, 在所有 C++ 提交中击败了100.00%的用户
代码(非递归)
结果:
《剑指offer》面试题38. 字符串的排列的更多相关文章
- 剑指offer 面试题38 字符串的排列
我惯用的dfs模板直接拿来套 class Solution { public: vector<string> Permutation(string str) { if(str.empty( ...
- C++版 - 剑指offer面试题28: 字符串的排列
题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...
- 剑指Offer:面试题28——字符串的排列(java实现)(待序)
问题描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母 ...
- 剑指Offer - 九度1369 - 字符串的排列
剑指Offer - 九度1369 - 字符串的排列2014-02-05 21:12 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所 ...
- 剑指offer(27)字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入 ...
- 剑指offer 面试题38
面试题38:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 主要的思路是进 ...
- 【剑指Offer】27、字符串的排列
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. ...
- 【剑指offer 面试题38】数字在排序数组中出现的次数
思路: 利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果. C++: #include <iostream> #include <vector> using ...
- C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...
- 剑指offer二十七之字符串的排列
一.题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 二.思路 我们 ...
随机推荐
- 🏆【CI/CD技术专题】「Docker实战系列」(1)本地进行生成镜像以及标签Tag推送到DockerHub
背景介绍 Docker镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.创建的镜像最好要符合Docker Hub的tag要求,因为在Docker Hub注册 ...
- AJAX get和post请求
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>&l ...
- Spring核心原理之IoC容器初体验(2)
本文节选自<Spring 5核心原理> 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现 ...
- GoLang设计模式18 - 适配器模式
说明 适配器模式是一种结构型设计模式.我们用常用的两种笔记本电脑来说明一下这种设计模式. 我们常用的笔记本无非是这两大类: Macbook Pro Windows Laptop 当前这两类笔记本常见的 ...
- 【LeetCode】963. Minimum Area Rectangle II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线段长+线段中心+字典 日期 题目地址:https: ...
- 【LeetCode】792. Number of Matching Subsequences 解题报告(Python)
[LeetCode]792. Number of Matching Subsequences 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)
[LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
- 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)
[剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...
- bootstrap datetimepick 时分秒选择,坑我15个小时,整理记录
官网的datetimepick 下载链接 官网下载 <input type="text" readonly name="feedDay" id=" ...
- OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
目录 概 主要内容 Sermanet P., Eigen D., Zhang X., Mathieu M., Fergus R., LeCun Y. OverFeat:integrated recog ...