剑指offer——面试题28:字符串的排列
剑指offer——面试题28:字符串的排列
Solution1:
2018年9月2日重做
典型的DFS套路,LeetCode 46 && 47
【46】https://blog.csdn.net/Allenlzcoder/article/details/80271771
【47】https://blog.csdn.net/Allenlzcoder/article/details/80275707,
重写一下:
class Solution {
public:vector<string> Permutation(string str) {if (!str.size()) return {};if (str.size() == 1) return vector<string> {str};set<string> tmp_res;//未访问过 0; 访问过 1vector<int> visited(str.size(), 0);int level = 0;string tmp_str;my_dfs(str, tmp_res, tmp_str, visited, level);return vector<string> (tmp_res.begin(), tmp_res.end());}void my_dfs(string &str, set<string> &tmp_res, string &tmp_str, vector<int> &visited, int level) {if (level == str.size()) {tmp_res.insert(tmp_str);return;} else {for (int i = 0; i < str.size(); i++) {if (visited[i]) continue;else {tmp_str += str[i];visited[i] = 1;my_dfs(str, tmp_res, tmp_str, visited, level + 1);tmp_str.pop_back();visited[i] = 0;}}}}
};
Soltion2:
第一次做题时的答案
发现了一个代码风格很清新的博客,网址是:http://www.cnblogs.com/qqky/
此题答案就是根据此博客整理而来~
class Solution {
public:vector<string> Permutation(string str) {vector<string> res;if(str.empty())return res;FindAll(str, 0, res);sort(res.begin(),res.end());return res;}void FindAll(string s, int begin, vector<string> &result){ //遍历第begin位的所有可能//一次遍历的结束条件if(begin == s.size()-1)result.push_back(s);for(int i = begin; i<s.size(); i++){if(i!=begin && s[i] == s[begin])continue;//有与begin位重复的字符串不进行交换,跳过swap(s[i],s[begin]);//当i==begin时,也要遍历其后面的所有字符//当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符FindAll(s,begin+1,result);swap(s[i],s[begin]);//为了防止重复的情况,还需要将begin处的元素重新换回来}return;}
};
剑指offer——面试题28:字符串的排列相关推荐
- 剑指Offer - 面试题38. 字符串的排列(全排列,排序,回溯+剪枝)
1. 题目 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出:["ab ...
- 剑指offer面试题38. 字符串的排列(回溯)
题目描述 **输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.** 思路 详见链接 代码 class Solution:def permut ...
- [剑指offer]面试题28:字符串的排列
面试题28:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. ...
- 《剑指Offer》38:字符串的排列
题目 输入一个字符串,打印该字符中字符的所有排列. 例如,输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串有abc.acb.bac.bca.cab.cba 分析 把一个字符串看成由两 ...
- 剑指offer面试题28. 对称的二叉树(递归)
题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 思路 详见链接 代码 class Solution:def isSymmetric(self, ...
- 剑指offer面试题28:对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 示例 1: 输入:root = [1,2,2,3,4,4,3] 输 ...
- 【剑指offer-Java版】28字符串的排列
字符串的全排列:全排列问题刚刚做过,而且解决方法不止一种 递归,多想想 public class _Q28<T> {private int count = 0;public void Pr ...
- 剑指offer——面试题54:表示数值的字符串
剑指offer--面试题54:表示数值的字符串 参考网址:https://www.nowcoder.com/profile/9717187/codeBookDetail?submissionId=15 ...
- 剑指offer——面试题49:把字符串转换成整数
剑指offer--面试题49:把字符串转换成整数 Solution1: 代码写的啰嗦,但思路清晰..LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案 class Soluti ...
最新文章
- Java项目:在线考试系统(java+SSM+mysql+JSP)
- NLineInputFormat案例
- mybatis的执行流程
- SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
- java 拼接字符串性能_java字符串拼接与性能分析详解
- qt on android 桌面鼠标事件,關於Qt on Android,程序安裝到手機,界面只占到一小部分。...
- 休眠 关闭串口输出_C#实例:串口通讯
- 雅虎将于4月底关闭自助式广告测试
- 【学习笔记】第五章 python3核心技术与实践--字典和集合
- Dubbo对于REST协议的支持
- Hibernate 拦截器的使用--动态表名
- sqlite查询乘以某列如果是null就换成_大数据之Hive group by with cube/rollup分组查询...
- 什么是命名空间?php命名空间的基本应用分享
- 计算机报名填错学制,2017年在职研究生填报信息发现错误怎么修改?
- 20165237 2017-2018-2 《Java程序设计》第8周学习总结
- 21世纪八大新兴技术领域对美国战略威慑的影响
- 华为p20nfc怎么复制门禁卡_华为P20手机来刷门禁_如何给P20手机添加绑定门禁卡的方法...
- 安装RAC小记(Oracle11gR2)
- 千里挑一!玻色量子获金鸡湖创业大赛人工智能赛道冠军
- 如何用计算机画函数图像,怎样用电脑画函数图象,或用什麽软件画
热门文章
- 数据结构笔记(二十三)--哈夫曼树
- 【字符串】面试题之以逗号分割字符串,形成二维数组
- ionic 图片显示在屏幕中间_iPad屏幕坏点亮点怎么看 自查iPad屏幕坏点亮点方法【详解】...
- rust能捏人不_吃鸡:捏脸系统上线后,玩家们都嗨了
- python缓存memoryerror_Python安装会抛出大量MemoryError()的
- 恢复初始快捷键_如何将Windows10系统还原初始状态
- python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
- linux 分析系统配置,在Linux系统上部署AWStats日志分析系统
- c语言中sprintf函数_在C / C ++中使用sprintf()函数
- sql 联合_SQL联合,SQL联合全部