1.无重复字符串的排列组合-面试题 08.07-简单

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

输入:S = “qwe”
输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”]
输入:S = “ab”
输出:[“ab”, “ba”]

答案

/*
*   思路:回溯思想。
*/
class Solution {// 用一个used存储已经访问过的数据private boolean[] used;//存储结果private List<String> res;//字符长度private int len;public String[] permutation(String S) {len = S.length();used = new boolean[len];res = new ArrayList<>();dfs(S, new StringBuilder(), 0);return res.toArray(new String[0]);}private void dfs(String s, StringBuilder sb, int cnt) {// end —— 当sb长度与s长度一致时结束,存储答案if (cnt == len) {res.add(sb.toString());return;}// 回溯模板for (int i = 0; i < len; i++) {if (!used[i]) {//访问该位时,设置为true,防止下一次递归时重复访问。used[i] = true;sb.append(s.charAt(i));//递归dfs(s, sb, cnt + 1);//再次将该位设置为未访问状态used[i] = false;sb.deleteCharAt(cnt);}}}
}

2.有重复字符串的排列组合

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合

输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]
输入:S = “ab”
输出:[“ab”, “ba”]

答案

/*
* 思路:同样是回溯思想,与上面类似,但是需要去重。
*/
class Solution {public String[] permutation(String S) {List<String> list = new ArrayList<>();char[] arr = S.toCharArray();//将数组排好序,方便去重Arrays.sort(arr);boolean[] book = new boolean[arr.length];dfs(list, new StringBuilder(), book, arr);String[] res = new String[list.size()];for (int i = 0; i < res.length; i++)res[i] = list.get(i);return res;}public void dfs(List<String> res, StringBuilder sb, boolean[] book, char[] arr) {if (sb.length() == arr.length) {res.add(sb.toString());return;}for (int i = 0; i < arr.length; i++) {if (!book[i]) {if (i > 0 && arr[i] == arr[i - 1] && !book[i - 1]){//去重continue;}else {sb.append(arr[i]);book[i] = true;dfs(res, sb, book, arr);book[i] = false;sb.deleteCharAt(sb.length() - 1);}}}}
}

leetcode-排列组合问题相关推荐

  1. [leetcode]排列组合子集(python)

    文章目录 排列 全排列不重复,T46 排列有重复不可复选,T47 排列无重复可复选 组合 组合不重复不可复选,T77 组合总和有重复不可复选,T40 组合总和无重复可复选,T39 子集 子集不重复不可 ...

  2. LeetCode 216. 组合总和 III(排列组合 回溯)

    1. 题目 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输 ...

  3. LeetCode 40. 组合总和 II(排列组合 回溯)

    1. 题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...

  4. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  5. LeetCode:数组(排列组合,二分查找I,二分查找II)

    1,排列组合 38,剑指Offer:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. class Solution {Li ...

  6. 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)

    仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...

  7. LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...

  8. leetcode面试题 08.08. 有重复字符串的排列组合(回溯)

    有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq",&q ...

  9. 【LeetCode每天一题】Permutations(排列组合)

    Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...

  10. Leetcode 组合总和 与 排列组合相关问题

    Leetcode 组合总和 与 全排列相关问题 组合总和 题目链接: Leetcode 39.组合总和 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 c ...

最新文章

  1. OpenCV常遇问题解决方法汇总
  2. Linux下查看CPU/内存/硬盘的shell命令
  3. 数据库中字段类型对应C#中的数据类型
  4. php mysql防卡_php mysql防止sql注入详解
  5. L - Lookup Performance(主席树)
  6. go比java快多少_Java 11快多少?
  7. python列表添加数字_Python-识别列表中的连续数字组
  8. 浏览器自带的前进后退按钮禁用
  9. 微型计算机简化结构,基于FPGA的简易微型计算机结构分析与实现
  10. python 并发编程 多线程 目录
  11. python讲解-详解python中@的用法
  12. servlet监听器Listener(理论+例子)
  13. 如何开启刷题,蓝桥杯练习系统
  14. 自动驾驶笔记-轨迹跟踪-综述
  15. 三个方法教会大家怎样在图片上添加水印,轻松实现水印添加!
  16. access建立两个字段唯一索引_Mysql不止CRUD,聊聊索引
  17. 开年福利!微服务前后端开发手册,打造完美全栈工程师
  18. WC2017 Day3
  19. Cravatar头像
  20. 输出姓名对应的电话号码C语言,C语言电话本程序(只是简单的姓名和电话号码增删改查),在线等...

热门文章

  1. css3背景颜色渐变属性(Gradients)
  2. TEANMA(天玛)-公共广播系统中扬声器配置及相关注意事项解析
  3. PTA 六度空间 思路分析及代码解析
  4. 书籍折页是什么效果_书籍折页什么样 - 卡饭网
  5. 无线专题 WAN口和LAN口、WLAN和WiFi区别
  6. python 城市地图_Python查询一个城市的谷歌地图的经度和纬度
  7. 现如今安卓手机的系统优化哪家好呢?
  8. 电脑系统优化清理工具CCleaner
  9. EXE高清图标(ico)制作教程
  10. [小白slam攻略]ROVIO安装运行及保存轨迹用evo评估