剑指Offer - 面试题38. 字符串的排列(全排列,排序,回溯+剪枝)
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. 字符串的排列(全排列,排序,回溯+剪枝)相关推荐
- 剑指offer面试题38. 字符串的排列(回溯)
题目描述 **输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.** 思路 详见链接 代码 class Solution:def permut ...
- C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...
- 剑指offer——面试题38:数字在排序数组中出现的次数
剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...
- 剑指offer——面试题17:合并两个排序的链表
剑指offer--面试题17:合并两个排序的链表 Solution1: 不要犯低级错误... /* struct ListNode {int val;struct ListNode *next;Lis ...
- 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)
剑指offer--面试题67:机器人的运动范围(回溯法) Solution1: 此题和66题均是典型的回溯法题目,对比记忆思路! class Solution {public:int movingCo ...
- [剑指offer]面试题17:合并两个排序的链表
面试题17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示.链表结点定义如 ...
- 剑指Offer面试题:16.合并两个排序的链表
PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:"哦,原来你也在这里? " 一.题目:合并两个排序 ...
- [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]
[问题描述][中等] 统计一个数字在排序数组中出现的次数. 示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7, ...
- 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 思路 ...
最新文章
- Flask开发服务器启动方式
- 软考网络工程师身份证忘记领取啦怎么办
- Shell中要如何调用别的shell脚本
- android 等待回调再返回结果_震惊!!只剩你还不懂Java回调机制了!
- 【springboot】【若依(ruoyi)】@RestController 接口跨域请求
- lisp 绘制立体感的五角星_[原创]圆内加五角星lsp代码,详细有注解
- 太阳能板清洗机器人科沃斯_科沃斯推出水清洗扫地机器人 要把打扫做的更彻底...
- leetcode170. 两数之和 III - 数据结构设计
- linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法
- 斑马打印机怎么打印二维码_万能打印机厂家是怎么改良打印机的?
- 编译原理第三章词法分析知识点思维导图版
- 实验三 交换机的配置
- linux根据关键字查询日志的方法
- Capstone CS5218转接设计|DP转HDMI 4K 30HZ转接电路
- 软件行业的QA与QC的区别
- 杨氏模量(E)的处理方式对于封装翘曲的影响居然有这么大
- HDU-2094-产生冠军
- win10修复引导工具怎么用【系统天地】
- 人过青年,我们的黄金时代过去了吗?
- 卡尔曼滤波之目标跟踪
热门文章
- C++ Handle(句柄) part1
- 如何手工抓取dump文件及分析
- 一个服务器多个网站多个域名,多个域名一个服务器吗
- android mysql 数据库文件_android mysql数据库文件
- ARM中各始终之间的关系,FCLK HCLK PCLK的关系
- Linux进程全解2——进程环境(环境变量、进程运行的虚拟地址空间)
- vue indev.html,webpack - Can't add script tag to Vue component files ( *.vue ) - Stack Overflow
- 8.在idea中配置maven
- Redis 3.0.2集群搭建以及相关问题汇总
- SuperSlide