leetcode-排列组合问题
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-排列组合问题相关推荐
- [leetcode]排列组合子集(python)
文章目录 排列 全排列不重复,T46 排列有重复不可复选,T47 排列无重复可复选 组合 组合不重复不可复选,T77 组合总和有重复不可复选,T40 组合总和无重复可复选,T39 子集 子集不重复不可 ...
- LeetCode 216. 组合总和 III(排列组合 回溯)
1. 题目 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输 ...
- LeetCode 40. 组合总和 II(排列组合 回溯)
1. 题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
- [leetcode] 题型整理之排列组合
一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...
- LeetCode:数组(排列组合,二分查找I,二分查找II)
1,排列组合 38,剑指Offer:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. class Solution {Li ...
- 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)
仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...
- LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合
点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...
- leetcode面试题 08.08. 有重复字符串的排列组合(回溯)
有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq",&q ...
- 【LeetCode每天一题】Permutations(排列组合)
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...
- Leetcode 组合总和 与 排列组合相关问题
Leetcode 组合总和 与 全排列相关问题 组合总和 题目链接: Leetcode 39.组合总和 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 c ...
最新文章
- OpenCV常遇问题解决方法汇总
- Linux下查看CPU/内存/硬盘的shell命令
- 数据库中字段类型对应C#中的数据类型
- php mysql防卡_php mysql防止sql注入详解
- L - Lookup Performance(主席树)
- go比java快多少_Java 11快多少?
- python列表添加数字_Python-识别列表中的连续数字组
- 浏览器自带的前进后退按钮禁用
- 微型计算机简化结构,基于FPGA的简易微型计算机结构分析与实现
- python 并发编程 多线程 目录
- python讲解-详解python中@的用法
- servlet监听器Listener(理论+例子)
- 如何开启刷题,蓝桥杯练习系统
- 自动驾驶笔记-轨迹跟踪-综述
- 三个方法教会大家怎样在图片上添加水印,轻松实现水印添加!
- access建立两个字段唯一索引_Mysql不止CRUD,聊聊索引
- 开年福利!微服务前后端开发手册,打造完美全栈工程师
- WC2017 Day3
- Cravatar头像
- 输出姓名对应的电话号码C语言,C语言电话本程序(只是简单的姓名和电话号码增删改查),在线等...