【LeetCode笔记】剑指 Offer 38. 字符串的排列(Java、字符串、DFS)
文章目录
- 题目描述
- 思路 && 代码
- 二刷
打卡第五天~
题目描述
- 和这道题很相似,只是数据结构不同
思路 && 代码
- DFS + 辅助访问数组 + Set 减枝
- 通过 Set 实现去重
class Solution {Set<String> res = new HashSet<>();char[] arr;boolean[] visited;public String[] permutation(String s) {arr = s.toCharArray();visited = new boolean[arr.length];dfs(new StringBuilder());return res.toArray(new String[0]);}// 返回 s 的全排列(可重复)public void dfs(StringBuilder s) {// 找到一个结果的情况if(s.length() == arr.length) {res.add(s.toString());return;}Set<Character> set = new HashSet<>();for(int i = 0; i < arr.length; i++) {// 当前字符未访问if(!visited[i]) {visited[i] = true;// 当前字符第一次出现if(!set.contains(arr[i])) {dfs(s.append(arr[i]));set.add(arr[i]);s.delete(s.length() - 1, s.length());}// 恢复 visited[i]visited[i] = false;}}}
}
二刷
- 直觉没错,还是 DFS + Set 去重
class Solution {Set<String> set = new HashSet<>();boolean[] visited;char[] arr;public String[] permutation(String s) {visited = new boolean[s.length()];arr = s.toCharArray();dfs(new StringBuilder());return set.toArray(new String[0]);}void dfs(StringBuilder sb) {if(sb.length() == arr.length) {set.add(sb.toString());}for(int i = 0; i < arr.length; i++) {if(!visited[i]) {visited[i] = true;sb.append(arr[i]);dfs(sb);sb.deleteCharAt(sb.length() - 1);visited[i] = false;}}}
}
【LeetCode笔记】剑指 Offer 38. 字符串的排列(Java、字符串、DFS)相关推荐
- 【LeetCode】剑指 Offer 38. 字符串的排列
[LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...
- 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
[LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...
- Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)
文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...
- LeetCode——剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 题目 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例:输入:s = "abc" ...
- Leetcode刷题笔记——剑指offer II (一)【整数、数组、字符串、链表】
目录 整数 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 00 ...
- ++递归 字符串全排列_剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...
- [字符串] --- 字符串的排列(剑指 Offer 38)
[试题描述] 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb ...
- 【LeetCode】剑指 Offer 67. 把字符串转换成整数
[LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...
- 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串
[LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...
- 【LeetCode】剑指 Offer 20. 表示数值的字符串
[LeetCode]剑指 Offer 20. 表示数值的字符串 文章目录 [LeetCode]剑指 Offer 20. 表示数值的字符串 package offer;import java.util. ...
最新文章
- Python 用户的三次登录机会
- CVPR 2021:记一次神奇的 Rebuttal 经历
- mysql会话级表_php – MySQL会话表方法
- vue+vuex+leaflet Jest单测踩坑指南
- oracle 11g ocfs,Oracle 将不再提供ASMlib和OCFS2软件和支持给红帽 RedHat 6的新发行版
- Linux简介、什么是Linux
- 为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
- [转]ORACLE日期时间函数大全
- 支持多个版本的ASP.NET Core Web API
- JVM04内存结构概述
- MySQL的varchar定义长度到底是字节还是字符
- iDRAC RAC0218 最大回话数
- ARCGIS中生成KML文件
- SkipList 一种使用概率替代平衡树的数据结构
- 【matplotlib】画图怎样将中文为宋体-英文为新罗马字体
- Tableau常用可视化图形介绍及其适用场景
- Android超强大的粒子动画库,流星雨,爆炸,满屏飞花,等粒子特效快速实现
- 安卓开发 java.lang.IllegalStateException 	isPlaying() 解决方案
- 河南高考成绩位次查询2021,2021年河南高考状元多少分是谁,河南高考状元名单资料...
- 高频强调滤波增强图像
热门文章
- MySQL小问题:导入employee测试数据
- css3 固定,CSS3 calc()不适用于固定位置/绝对位置
- 数学在计算机科学上的应用文献,数学计算机论文,关于计算机在数学教学中的应用相关参考文献资料-免费论文范文...
- java下载文件夹_java如何通过共享目录下载文件夹(有子文件夹)到本地目录?...
- 爱尔兰圣三一学院计算机全球排名,QS世界大学学科排名,爱尔兰圣三一学院20个学科进世界百强...
- simulink显示多个数据_Matlab/Simulink与自动驾驶(ADAS)算法开发
- Debian10降级安装php,如何在Debian 10 Linux上安装PHP
- matplotlib调节colorbar的大小
- Python利用turtle绘制五角星
- Registry注册机制