剑指Offer——字符串的排列(JS实现)

简介: 剑指Offer——字符串的排列(JS实现)

题目描述

image.png

解题思路

  • 这道题属于考查DFS(深度优先遍历)

*和本道题几乎完全一样的有全排列问题,都是在考查DFS

  • DFS的本质就是递归
  • 本题通过设置一个和字符串长度一致的一维数组,用来表示该元素是否被遍历过,初始值全为false表示都没有被遍历过
  • 当dfs收到的参数的长度和输入s的长度一致时,说明一条路径已经遍历完了,然后开始存储并返回

解题代码

var permutation = function(s) {
    const trace = [];
    const res = [];
    for (let i = 0; i < s.length;i++) {
        trace[i] = false;
    }
    function dfs(str) {
        if (str.length === s.length) {
            res.push(str);
            return;
        }
        for (let i = 0;i < s.length;i++) {
            if (trace[i] === true) continue;
            trace[i] = true;
            dfs(str + s[i]);
            trace[i] = false;
        } 
    }
    dfs('');
    return [...new Set(res)];
};

实现效果

image.png

总结(本题给我们的启示思路)

  • 启示一:学会使用DFS
  • 启示二:通过设置一个同纬度的布尔值数组来表示该位置的元素是否被遍历过
  • 启示三;学会通过集合对数组重复元素进行去重
相关文章
|
2月前
|
JavaScript 前端开发
JS几种拼接字符串的方法
JS几种拼接字符串的方法
53 1
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
28天前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
23 2
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
2月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
47 3
|
3月前
|
JavaScript 前端开发
javascript创建字符串
javascript创建字符串
|
3月前
|
JavaScript 前端开发
如何在JavaScript中替换字符串:一篇详细指南
如何在JavaScript中替换字符串:一篇详细指南
|
3月前
|
JavaScript 前端开发 C++
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
|
3月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
3月前
|
存储 移动开发 JavaScript
用 JavaScript 操作字符串
用 JavaScript 操作字符串