剑指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:字符串的排列相关推荐

  1. 剑指Offer - 面试题38. 字符串的排列(全排列,排序,回溯+剪枝)

    1. 题目 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出:["ab ...

  2. 剑指offer面试题38. 字符串的排列(回溯)

    题目描述 **输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.** 思路 详见链接 代码 class Solution:def permut ...

  3. [剑指offer]面试题28:字符串的排列

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

  4. 《剑指Offer》38:字符串的排列

    题目 输入一个字符串,打印该字符中字符的所有排列. 例如,输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串有abc.acb.bac.bca.cab.cba 分析 把一个字符串看成由两 ...

  5. 剑指offer面试题28. 对称的二叉树(递归)

    题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 思路 详见链接 代码 class Solution:def isSymmetric(self, ...

  6. 剑指offer面试题28:对称的二叉树

    题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 示例 1: 输入:root = [1,2,2,3,4,4,3]               输 ...

  7. 【剑指offer-Java版】28字符串的排列

    字符串的全排列:全排列问题刚刚做过,而且解决方法不止一种 递归,多想想 public class _Q28<T> {private int count = 0;public void Pr ...

  8. 剑指offer——面试题54:表示数值的字符串

    剑指offer--面试题54:表示数值的字符串 参考网址:https://www.nowcoder.com/profile/9717187/codeBookDetail?submissionId=15 ...

  9. 剑指offer——面试题49:把字符串转换成整数

    剑指offer--面试题49:把字符串转换成整数 Solution1: 代码写的啰嗦,但思路清晰..LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案 class Soluti ...

最新文章

  1. Java项目:在线考试系统(java+SSM+mysql+JSP)
  2. NLineInputFormat案例
  3. mybatis的执行流程
  4. SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
  5. java 拼接字符串性能_java字符串拼接与性能分析详解
  6. qt on android 桌面鼠标事件,關於Qt on Android,程序安裝到手機,界面只占到一小部分。...
  7. 休眠 关闭串口输出_C#实例:串口通讯
  8. 雅虎将于4月底关闭自助式广告测试
  9. 【学习笔记】第五章 python3核心技术与实践--字典和集合
  10. Dubbo对于REST协议的支持
  11. Hibernate 拦截器的使用--动态表名
  12. sqlite查询乘以某列如果是null就换成_大数据之Hive group by with cube/rollup分组查询...
  13. 什么是命名空间?php命名空间的基本应用分享
  14. 计算机报名填错学制,2017年在职研究生填报信息发现错误怎么修改?
  15. 20165237 2017-2018-2 《Java程序设计》第8周学习总结
  16. 21世纪八大新兴技术领域对美国战略威慑的影响
  17. 华为p20nfc怎么复制门禁卡_华为P20手机来刷门禁_如何给P20手机添加绑定门禁卡的方法...
  18. 安装RAC小记(Oracle11gR2)
  19. 千里挑一!玻色量子获金鸡湖创业大赛人工智能赛道冠军
  20. 如何用计算机画函数图像,怎样用电脑画函数图象,或用什麽软件画

热门文章

  1. 数据结构笔记(二十三)--哈夫曼树
  2. 【字符串】面试题之以逗号分割字符串,形成二维数组
  3. ionic 图片显示在屏幕中间_iPad屏幕坏点亮点怎么看 自查iPad屏幕坏点亮点方法【详解】...
  4. rust能捏人不_吃鸡:捏脸系统上线后,玩家们都嗨了
  5. python缓存memoryerror_Python安装会抛出大量MemoryError()的
  6. 恢复初始快捷键_如何将Windows10系统还原初始状态
  7. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
  8. linux 分析系统配置,在Linux系统上部署AWStats日志分析系统
  9. c语言中sprintf函数_在C / C ++中使用sprintf()函数
  10. sql 联合_SQL联合,SQL联合全部