文章目录

  • 题目描述
  • 思路 && 代码
    • 二刷

打卡第五天~

题目描述

  • 和这道题很相似,只是数据结构不同

思路 && 代码

  • 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)相关推荐

  1. 【LeetCode】剑指 Offer 38. 字符串的排列

    [LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...

  2. 【LeetCode】剑指 Offer 46. 把数字翻译成字符串

    [LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...

  3. Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)

    文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...

  4. LeetCode——剑指 Offer 38. 字符串的排列

    剑指 Offer 38. 字符串的排列 题目 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例:输入:s = "abc" ...

  5. Leetcode刷题笔记——剑指offer II (一)【整数、数组、字符串、链表】

    目录 整数 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 00 ...

  6. ++递归 字符串全排列_剑指 Offer 38. 字符串的排列

    剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...

  7. [字符串] --- 字符串的排列(剑指 Offer 38)

    [试题描述] 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb ...

  8. 【LeetCode】剑指 Offer 67. 把字符串转换成整数

    [LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...

  9. 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串

    [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...

  10. 【LeetCode】剑指 Offer 20. 表示数值的字符串

    [LeetCode]剑指 Offer 20. 表示数值的字符串 文章目录 [LeetCode]剑指 Offer 20. 表示数值的字符串 package offer;import java.util. ...

最新文章

  1. Python 用户的三次登录机会
  2. CVPR 2021:记一次神奇的 Rebuttal 经历
  3. mysql会话级表_php – MySQL会话表方法
  4. vue+vuex+leaflet Jest单测踩坑指南
  5. oracle 11g ocfs,Oracle 将不再提供ASMlib和OCFS2软件和支持给红帽 RedHat 6的新发行版
  6. Linux简介、什么是Linux
  7. 为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
  8. [转]ORACLE日期时间函数大全
  9. 支持多个版本的ASP.NET Core Web API
  10. JVM04内存结构概述
  11. MySQL的varchar定义长度到底是字节还是字符
  12. iDRAC RAC0218 最大回话数
  13. ARCGIS中生成KML文件
  14. SkipList 一种使用概率替代平衡树的数据结构
  15. 【matplotlib】画图怎样将中文为宋体-英文为新罗马字体
  16. Tableau常用可视化图形介绍及其适用场景
  17. Android超强大的粒子动画库,流星雨,爆炸,满屏飞花,等粒子特效快速实现
  18. 安卓开发 java.lang.IllegalStateException isPlaying() 解决方案
  19. 河南高考成绩位次查询2021,2021年河南高考状元多少分是谁,河南高考状元名单资料...
  20. 高频强调滤波增强图像

热门文章

  1. MySQL小问题:导入employee测试数据
  2. css3 固定,CSS3 calc()不适用于固定位置/绝对位置
  3. 数学在计算机科学上的应用文献,数学计算机论文,关于计算机在数学教学中的应用相关参考文献资料-免费论文范文...
  4. java下载文件夹_java如何通过共享目录下载文件夹(有子文件夹)到本地目录?...
  5. 爱尔兰圣三一学院计算机全球排名,QS世界大学学科排名,爱尔兰圣三一学院20个学科进世界百强...
  6. simulink显示多个数据_Matlab/Simulink与自动驾驶(ADAS)算法开发
  7. Debian10降级安装php,如何在Debian 10 Linux上安装PHP
  8. matplotlib调节colorbar的大小
  9. Python利用turtle绘制五角星
  10. Registry注册机制