(D卷,100分)- 全排列(Java & JS & Python)

该博客探讨了如何使用回溯法(深度优先搜索)解决全排列问题,给出了一种字符串中大写字母的不重复排列计算方法。针对输入长度不超过10的字符串,提供了Java、JavaScript和Python的代码实现,并分析了算法的时间复杂度为O(n!)和空间复杂度为O(n)。
摘要由CSDN通过智能技术生成

获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。

如:S为ABA,则不同的排列有ABA、AAB、BAA三种。

输入描述
输入一个长度不超过10的字符串S,我们确保都是大写的。

输出描述
输出S重新排列的所有不相同的排列数(包含自己本身)。

用例
输入 ABA
输出 3
说明 无
输入 ABCDEFGHHA
输出 907200
说明 无

题目解析
给定一个只包含大写英文字母的字符串S。
需要找出S的所有不同排列数。
解题思路:
这是一个典型的排列问题,可以使用回溯法(深度优先搜索)来解决。
从字符串的第一个字符开始,逐个选择字符进行排列,并递归处理剩余的字符。
使用一个visited数组来记录字符是否被使用过,以避免产生重复的排列。
当字符串的所有字符都被使用过,并且生成了一个排列时,计数器加一。
算法复杂度:
时间复杂度:O(n!),其中n是字符串的长度。因为对于n个字符,有n!种排列方式。
空间复杂度:O(n),其中n是字符串的长度。需要使用visited数组和递归栈空间。
java算法源码

import java.util.Scanner;  
  
public class StringPermutations {
  • 95
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值