1. 题目

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]限制:
1 <= s 的长度 <= 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

相关题目:

LeetCode 46. 全排列(回溯)
LeetCode 47. 全排列 II(回溯+搜索剪枝)

2. 解题

class Solution {int n;vector<string> ans;string str;
public:vector<string> permutation(string s) {sort(s.begin(), s.end());//先排序,后面好剪枝,跳过重复的n = s.size(); vector<bool> visited(n,false);//访问过某字符了bt(s,0,visited);return ans;}void bt(string& s, int count, vector<bool>& visited){if(count == n){ans.push_back(str);return;}for(int i = 0; i < n; ++i){if(!visited[i]){if(i != 0 && s[i-1] == s[i] && visited[i-1])//if(i != 0 && s[i-1] == s[i] && !visited[i-1])continue;//前一个字符等于当前,跳过//有无!差别是剪枝顺序差别//推荐第二种写法,剪枝更彻底visited[i] = true;str.push_back(s[i]);bt(s,count+1,visited);str.pop_back();visited[i] = false;}}}
};

参考解题

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

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

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

  2. C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数

    数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...

  3. 剑指offer——面试题38:数字在排序数组中出现的次数

    剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...

  4. 剑指offer——面试题17:合并两个排序的链表

    剑指offer--面试题17:合并两个排序的链表 Solution1: 不要犯低级错误... /* struct ListNode {int val;struct ListNode *next;Lis ...

  5. 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)

    剑指offer--面试题67:机器人的运动范围(回溯法) Solution1: 此题和66题均是典型的回溯法题目,对比记忆思路! class Solution {public:int movingCo ...

  6. [剑指offer]面试题17:合并两个排序的链表

    面试题17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示.链表结点定义如 ...

  7. 剑指Offer面试题:16.合并两个排序的链表

    PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:"哦,原来你也在这里? " 一.题目:合并两个排序 ...

  8. [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]

    [问题描述][中等] 统计一个数字在排序数组中出现的次数. 示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7, ...

  9. 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)

    题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 思路 ...

最新文章

  1. Flask开发服务器启动方式
  2. 软考网络工程师身份证忘记领取啦怎么办
  3. Shell中要如何调用别的shell脚本
  4. android 等待回调再返回结果_震惊!!只剩你还不懂Java回调机制了!
  5. 【springboot】【若依(ruoyi)】@RestController 接口跨域请求
  6. lisp 绘制立体感的五角星_[原创]圆内加五角星lsp代码,详细有注解
  7. 太阳能板清洗机器人科沃斯_科沃斯推出水清洗扫地机器人 要把打扫做的更彻底...
  8. leetcode170. 两数之和 III - 数据结构设计
  9. linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法
  10. 斑马打印机怎么打印二维码_万能打印机厂家是怎么改良打印机的?
  11. 编译原理第三章词法分析知识点思维导图版
  12. 实验三 交换机的配置
  13. linux根据关键字查询日志的方法
  14. Capstone CS5218转接设计|DP转HDMI 4K 30HZ转接电路
  15. 软件行业的QA与QC的区别
  16. 杨氏模量(E)的处理方式对于封装翘曲的影响居然有这么大
  17. HDU-2094-产生冠军
  18. win10修复引导工具怎么用【系统天地】
  19. 人过青年,我们的黄金时代过去了吗?
  20. 卡尔曼滤波之目标跟踪

热门文章

  1. C++ Handle(句柄) part1
  2. 如何手工抓取dump文件及分析
  3. 一个服务器多个网站多个域名,多个域名一个服务器吗
  4. android mysql 数据库文件_android mysql数据库文件
  5. ARM中各始终之间的关系,FCLK HCLK PCLK的关系
  6. Linux进程全解2——进程环境(环境变量、进程运行的虚拟地址空间)
  7. vue indev.html,webpack - Can't add script tag to Vue component files ( *.vue ) - Stack Overflow
  8. 8.在idea中配置maven
  9. Redis 3.0.2集群搭建以及相关问题汇总
  10. SuperSlide