js输入一个字符串,打印出该字符串中,所有字符的排列组合(超清晰)

news2024/12/29 9:26:26

一、题目

输入一个字符串,打印出该字符串中,所有字符的排列组合。

输入:'abc'

输出:['abc', 'acb', 'bca', 'bac', 'cab', 'cba']

二、思路

回溯算法。其核心思想是通过递归的方式进行深度优先搜索,当发现当前的选择不符合要求时,进行回退(即回溯)到上一个状态,并继续尝试其他的选择。通常适用于组合问题、排列问题、选择问题等需要搜索所有可能解的情况。

1. 创建一个空数组 result 用于存储生成的排列组合。

2. 定义一个辅助函数 permute,它接收两个参数:当前已形成的排列组合 current 和剩余的字符数组 remaining

3. 如果 remaining 数组为空,表示已经处理完所有字符,将 current 加入到 result 数组中。否则,遍历 remaining 数组,每次取出一个字符,将其追加到 current 中,并从 remaining 数组中移除该字符。然后,递归调用 permute 函数,传入更新后的 current 和 remaining 数组。

4. 在每一轮迭代中,需要进行回溯操作,即将已处理的字符重新加入到 remaining 数组,并将其从 current 中移除,以便尝试其他可能的组合。

5. result 数组去重

三、代码

    const str = 'abc'
    function getPermutations(str) {
        const result = [];

        function permute(current, remaining) {
            if (remaining.length === 0) {
                result.push(current);
            } else {
                for (let i = 0; i < remaining.length; i++) {
                    // 每次都拿出来一个放在最前面
                    const next = current + remaining[i];
                    // 删除被拿出来的那个,得到新字符串
                    const remainingChars = remaining.slice(0, i) + remaining.slice(i + 1);
                    // 新字符串递归
                    permute(next, remainingChars);
                }
            }
        }

        permute('', str);
        // 去重
        return [...new Set(result)]
    }

    // 示例用法
    const input1 = 'abb';
    const input2 = 'abc';

    console.log(getPermutations(input1));
    console.log(getPermutations(input2));

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习技术:如何使用交叉验证和ROC曲线提高疾病预测的准确性和效率?

一、引言 随着机器学习的普及&#xff0c;评估模型的性能越来越重要。交叉验证和ROC曲线是两种常见的评估模型性能的方法。本文将介绍这两种方法的基本原理和应用场景&#xff0c;并结合实际案例和技术实践&#xff0c;讲解如何使用交叉验证和ROC曲线来提高机器学习模型的性能…

mongodb原理

一&#xff1a;MongoDB的优点和缺点 优点 面向文档存储(类JSON数据模式简单而强大)动态查询全索引支持,扩展到内部对象和内嵌数组查询记录分析快速,就地更新高效存储二进制大对象 (比如照片和视频)复制和故障切换支持Auto- Sharding自动分片支持云级扩展性MapReduce 支持复杂…

chatgpt赋能python:Python选择对话框:简化用户操作的实用工具

Python选择对话框&#xff1a;简化用户操作的实用工具 在Python编程领域中&#xff0c;常常需要与用户进行交互&#xff0c;以便更好地控制程序运行结果。而选择对话框则是一种简化用户操作的实用工具&#xff0c;可避免用户输入错误或步骤繁琐的问题。在本篇文章中&#xff0…

【UE】一个需求案例掌握Timeline和插值Lerp

文章目录 问题背景结论先行timeline和lerp原理使用timelinelerp实现相机平滑跟随BUG猜想验证和解决 问题背景 今天用timelinelerp插值做了一个相机平滑跟随的需求 如果只是要求跟随&#xff0c;直接在tick中把相机位置设置成角色位置就可以 但希望有一个相机滞后角色一点点的…

如何避免ChatGPT,ChatGLM这类大语言模型胡说八道

“ ChatGPT&#xff0c;ChatGLM这类大语言模型一本正经的胡说八道&#xff0c;可能也是它创造性回答的部分。那么谁来判断它在编造无中生有的内容&#xff1f;恐怕只有人才能判断。模型怎么会产生幻觉&#xff0c;我们又怎么避免它产生幻觉&#xff1f;” 01 — 昨天体验了国产…

快上车,搭乘HUAWEI HiCar驶向未来

HUAWEI HiCar&#xff08;以下简称HiCar&#xff09;是华为提供的人-车-家全场景智慧互联解决方案&#xff0c;连接手机与车辆&#xff0c;充分发挥各自的优势属性&#xff0c;将手机的应用/服务生态延伸进车辆&#xff0c;实现以手机为核心的全场景体验。消费者通过HiCar可以感…

HTML 超链接标签、图片标签

超链接标签 超链接描述 HTML使用标签<a>来设置超文本链接 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 <a href"url">链接文…

【运维】Linux升级Python2

【运维】Linux升级Python2 操作系统&#xff1a;centos7python版本&#xff1a;升级前版本2.7.5&#xff0c;升级后2.7.18python3版本&#xff1a;升级前3.6.8&#xff0c;升级后版本3.8.8 1、查看当前python版本 [root1 ~]# python -V Python 2.7.5 2、yum安装python [roots14…

Apikit 自学日记:发起文档测试-Websocket

Websocket 进入某个WS协议的API文档详情页&#xff0c;点击文档上方 测试 标签&#xff0c;即可进入 API 测试页&#xff0c;系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求头部&#xff08;Header&…

Rovio智能车改锂电经验分享

目录 小车简介 改造思路 改造目的 步骤一、改锂电 电压检测 充电检测 结束语 本文介绍如何给wowwee Rovio智能车改电源过程。 首先介绍硬件情况 小车简介 小车功能强大&#xff0c;带红外定位&#xff0c;带缺电自动归位&#xff0c;带轨迹录制回放&#xff0c;带扬声器…

【PostgreSQL 数据库线下沙龙(武汉站)】PieCloudDB:云原生分布式虚拟数仓的诞生之旅...

2023年6月3日&#xff0c;开源软件联盟 PostgreSQL 中文社区在武汉举办了技术沙龙活动。本次活动主题围绕未来数据库展开讨论和分享。通过探讨未来数据库的概念和特点&#xff0c;为智能化时代的发展提供更多的支持和服务。同时&#xff0c;通过探讨数据库和AI技术的共生共荣&a…

基于SpringBoot的美食点评系统

1.引言 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 美食点评管理系统&#xff0c;主要的模块包括首页、个人中心、用户管理、餐厅管理、美食餐厅管理、地区管理、菜系管理、餐厅点评管理、系统…

短视频矩阵抖音账号矩阵系统源码开发者自研(一)

一、短视频矩阵系统源码框架建模搭建 目录 一、短视频矩阵系统源码框架建模搭建 1.抖音账号矩阵系统功能模型建模 2.短视频账号矩阵系统接口开发规则 二、短视频矩阵系统源码视频剪辑转码处理 短视频矩阵系统是一个多功能的视频内容管理系统&#xff0c;用于创建、剪辑发布…

vue3-多人聊天室角色识别(全栈)

文章目录 主要技术栈目的实现步骤1. 前端发送信息2. 后端处理数据3. 前端渲染数据4. store 主要技术栈 主要技术栈是vue3&#xff0c;springboot&#xff0c;websocket&#xff0c;element-plus 目的 主要目的是复习和梳理 实现步骤 1. 前端发送信息 发送信息&#xff0c…

【Spring Cloud系列】-负载均衡(Load Balancer,LB)

【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09; 文章目录 【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;一、什么是负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;二、负载均衡的主要…

【MySQL】MySQL中SQL执行流程

文章目录 一、MySQL语句执行流程1.1、主要的原因有以下几点1.2、具体执行流程图如下 二、存储引擎三、MySQL的架构与内部模块四、崩溃恢复时如何判断事务是否需要提交 一、MySQL语句执行流程 连接器&#xff08;Connector&#xff09;&#xff1a; 当客户端发送一个连接请求时…

设计模式学习之观察者模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式设计模式学习之策略模式和简单工厂模式的对比 这是设计模式系列的第7篇文章&#xff0c;在这之前我们已经介…

React函数式组件

1. 创建函数式组件 我们可以通过所定义的函数来进行react中组件的定义。首先我们可以定义一个函数&#xff0c;然后通过函数的返回值来进行相关组件的定义。例如下面这张写法&#xff0c;我们可以通过调用一个函数&#xff0c;通过其返回值来进行相关的操作。 function Test()…

chatgpt赋能python:Python遍历A到Z:SEO优化的关键

Python遍历A到Z&#xff1a;SEO优化的关键 对于任何一家网站来说&#xff0c;SEO (Search Engine Optimization, 搜索引擎优化)都是至关重要的&#xff0c;特别是在当今数字时代&#xff0c;人们常常会在搜索引擎中查找信息并浏览不同网站。其中一个重要的SEO策略是为每个网站…

笔记本安装双系统ubuntu时踩的坑——戴尔

如果你遇到以下的这些问题&#xff0c;不要直接装了&#xff0c;无解&#xff01;&#xff01;&#xff01; 建议看我另一篇教程&#xff0c;把硬盘取出来在另外的电脑上装好系统再放回去&#xff0c;这样嘎嘎快。 移动硬盘中安装Ubuntu 20.04系统——立省99%的问题_放风筝的…