有重复字符串的排列组合

leetcode 面试题 08.08. 有重复字符串的排列组合 面试题 08.08. 有重复字符串的排列组合 有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。 示例1: 输入:S = “qqe” 输出:[“eqq”,“qeq”,“qqe”] 示例2: 输入:S = “ab” 输出:[“ab”, “ba”] 提示: 字符都是英文字母。 字符串长度在[1, 9]之间。 记录了三种方法: 1.建立一个记录表,在每次回溯的时候查看当前字符是否被使用过 2.每次回溯的时候就减去使用过的字符,不用建表 3.对字符串进行排序,如果两个字符相同,就使用剪枝,跳过放前循 阅读详情

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

示例1:

输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]
示例2:

输入:S = “ab”
输出:[“ab”, “ba”]
提示:

字符都是英文字母。
字符串长度在[1, 9]之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-ii-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

利用回溯+剪枝算法来求解:

class Solution {
    
    private List<String> res = new ArrayList<>();
    //标记已经使用过的字符
    private int[] temp;
  
    public String[] permutation(String S) {
        if(S == null){
            return null;
        }
        char[] arr = S.toCharArray();
        //先排序
        xz(arr);
        S= String.valueOf(arr);
        temp = new int[S.length()];
        dg(S, 0 , "", res);
        String[] returnArr = new String [res.size()];
        for (int i = 0; i < returnArr.length; i++) {
            returnArr[i] = res.get(i);
        }
        return returnArr;
    }
    private void dg(String s, int index ,String p, List<String> res){
        if(index == s.length()){
            res.add(p);
            return;
        }
        /**for循环控制s的每个字符,可以这么理解,比如aab,
        我们可以理解成a0,a1,b2,其中0,1,2是每个字符的下标
        这样有助于我们画树形图理解。
*/
        for(int i = 0; i < s.length(); i ++){
        	//没有使用过
            if (temp[i] != 1){
              /**
              这里进行了剪枝,判断是否在同一层并且是否相等,这里有个问题
              temp[i - 1] == 1时也是可以解答出来的,所以我一脸蒙蔽,不知
              道有哪位大神可以解答下。
              */
                if (i > 0 && s.charAt(i) == s.charAt(i -1) && temp[i - 1] == 0 ){
                    continue;
                }
                p = p + s.charAt(i);
                temp[i] = 1;
                //递归
                dg(s, index + 1 , p, res);
                //怎么样设置的递归完怎么回去,dfs的回退的重点所在
                p = p.substring(0, p.length() - 1);
                temp[i] = 0;
            }

        }
        return;
    }
    public static void xz(char[] chs){
        for(int i = 0; i < chs.length-1; i++){
            for(int j = i+1; j<chs.length; j++){
                if(chs[j] < chs[i]){
                    char temp = chs[j];
                    chs[j] = chs[i];
                    chs[i] = temp;
                }
            }
        }
    }

}
最优化方法 25:PDHG 前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q 阅读详情

相关推荐

MTK手机传感器驱动开发避坑指南:从SCP代码大小限制到Overlay加载流程详解

本文详细解析了MTK平台传感器驱动开发中的常见问题,包括SCP代码大小限制、Overlay加载流程及客制化传感器集成。通过实战案例和优化策略,帮助开发者高效解决MTK传感器驱动开发中的技术难题,提升开发效率。

weixin_42522374的博客 401

《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++

这道题不算一道特别难的题。但是呢,剪枝和去重,才是这道题的重中之重。写出简洁并且高效的回溯算法并不容易。我们还得去多学习多总结!

weixin_49503250的博客 1501

Ubuntu系统全盘备份——TimeShift的安装与使用

所以如果有那天你不小心作了个大死,并且幸运到还能打开GNOME桌面和Timeshift(只要不是执行sudo rm -f /*这样的自杀程序)的时候,点击你要恢复的那个备份文件再点击Restore,经过短暂的重启后你的系统就成功恢复了。打开软件后,会有一些初始化设置,只需要一直点击 Next。根据自己电脑的内存大小决定是自动备份还是手动备份。当然,对于虚拟机用户来说,没有比在客户机直接拷贝虚拟磁盘文件更棒的方式了。点击左上角的 Create,就会执行备份操作。最下面的意思就是说不会自动备份需要手动操作。

琉璃轻纱的博客 4703

python中if...else...必须对齐,结果却错了!

需求场景 现有以下字符串: string = "liu de hua" 请打印该string字符串中的每个字母,并判断string中是否存在字母“e”,如果存在,停止打印;否则,输出:“字符串中不存在字符e”。 解析 使用for-in循环,遍历string; 输出当前字母; 使用if-else,如果存在字母“e”,结果循环,否则,输出:“字符串中不存在字符e”。 编写代码 string = ...

yfanjy的博客 6248

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流)

本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。

k6l7m8n9的博客 151

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

比较两个字符串是否有相同的字母且相同字母个数相等

问题 若给两组字符串如: s1 = ‘Public Relations’ s2 = ‘Crap Built on Lies’ 如果忽略大小写与空格,s1可以通过打乱顺序得到s2,则返回True,否则返回False s1 = 'Public Relations' s2 = 'Crap Built on Lies' import re #变为小写字母 s1 = s1.lower() s2 = s2....

qq_41629348的博客 3443

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

字符串中出现的相同字母的个数

public class Helloson1{ private static String s="abcdbcdabdefg"; private static char s1[]=s.toCharArray(); private static String s2=""; static int count=0; static int count1=0; public static voi

baixiaodie的专栏 1103

车载网络测试实操源码_使用CAPL解析VBF文件

VBF(Versatile Binary Format)文件是一种二进制文件格式,被沃尔沃、福特、马自达、吉利等汽车制造商广泛采用。这种格式无法使用我们常规的烧录器进行刷写,通常需要进行解析转化。如果各位需要自己编写软件或脚本来刷写VBF文件,或者需要对刷写功能进行测试时,那么本篇文章就会对你非常有用。今天我们就来讲一下如何使用CAPL脚本对VBF文件进行数据解析。VBF文件包含三部分:VBF版本段、文件头段、数据段。前面的版本段和文件头段是ASCII码,包含版本、地址、校验码等信息

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 2991

YOLOv11改进策略【损失函数篇】| WIoU v3:针对低质量样本的边界框回归损失函数

是一种基于IoU的损失函数,旨在解决目标检测中边界框回归损失函数在处理低质量训练数据时的问题。论文链接:https://arxiv.org/pdf/2301.10051 源码链接:https://github.com/Instinct323/wiou此处需要查看的文件是中定义了模型的损失函数和计算方法,我们想要加入新的损失函数就只需要将代码放到这个文件内即可将下方的函数替换原本的函数即可: 用于计算各种损失。在内修改如下代码,使模型调用此损失函数。 tal.py中是一些损失函数的功能应用。在内修改如下代码,

Limiiiing的博客 3795

面试题 08.08. 有重复字符串的排列组合

题目 有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。 示例: 输入:S = "qqe" 输出:["eqq","qeq","qqe"] 分析: 有重复字符串的排列组合,直观思路是先进行全排列,然后去重,但是set算法耗时较多,不是最优解法,见方法1,第二钟方法是,先对字符串进行排序,保证了相同的字符相邻,只需要取相同字符的第一个为起点即可,见方法2 方法1: 全排列然后去重 class Solution: def permutation(self, S: str) ->

chenghaoy的博客 1096

Java代码变更影响分析:从静态解析到动态调用图的实战全链路

本文介绍了Java代码提交影响分析的核心原理与实现方法。主要内容包括:1)静态分析技术,通过JavaParser解析AST构建调用图,记录类与方法间的调用关系;2)动态分析技术,使用ByteBuddy进行字节码增强,捕获运行时调用路径;3)JCCI工具实现,结合javalang、unidiff等技术分析代码改动影响,并将结果存储到SQLite数据库。文章提供了完整的代码示例,展示了从AST解析、动态调用跟踪到实际工具应用的完整技术栈,为代码变更影响分析提供了实用解决方案。

墨夶的博客 1252

leetcode 无重复字符串的排列组合

【打工人】面试题 08.07. 无重复字符串的排列组合 无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例1: 输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"] 示例2: 输入:S = "ab" 输出:["ab", "ba"] 提示: 字符都是英文字母。 字符串长度在[1, 9]之间。 show code 写了一堆,发现python库直接能复用排列组合的工具库 from it

Sunny_Future的博客 819

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

无重复字符串的排列组合

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例1: 输入:S = “qwe” 输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”] 示例2: 输入:S = “ab” 输出:[“ab”, “ba”] 提示: 字符都是英文字母。 字符串长度在[1, 9]之间。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutation-i-lcci 著作权归领扣网络所有。商

Jipon 1093

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode 08.08.有重复字符串的排列组合

编写一种方法,计算某字符串的所有排列组合。,说明当前路径长度等于字符串长度,表示找到一个排列。如果当前字符与前一个字符相同,且前一个字符未被使用(列表存储所有排列结果,最终将其转换为数组返回。进行排序,确保相同的字符相邻,方便后续去重。数组和字符数组的排序,避免生成重复排列。作用:用于构建当前路径(部分排列)。),用于存储所有排列结果。作用:存储输入字符串的字符数组。作用:存储所有生成的排列结果。:当前路径的长度(递归深度)。作用:记录输入字符串的长度。作用:记录字符是否被使用。进行排序,方便后续去重。

2301_81193552的博客 550

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【深度遍历】【排列组合】【力扣】有重复字符串的排列组合

排列组合,注意如何剔除重复值

hutaotaotao的博客 662

Leetcode--无重复字符串的排列组合

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例1: 输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"] 示例2: 输入:S = "ab" 输出:["ab", "ba"] 提示: 字符都是英文字母。 字符串长度在[1, 9]之间。 思路 使用回溯法, 将每个还...

半途行走的博客 1052

python实现不重复排列组合_Python实现输入字符串,返回其任意排列组合

在脉脉上看到的一道算法题,要求如下图:以下是用Python实现这一算法:def str_rank_combination(s=""):"""输入一个字符串,返回一个由这些字符组成的排列组合(递归思想)"""if len(s) ...

weixin_39675178的博客 1079

字符串的无重复排列组合

若字符串长度为n,将第一个字母分别与后面每一个字母进行交换,生成n种不同的全排列;再用第二个元素与后面每一个元素进行交换,生成n - 1种不同的全排列……输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]仔细观察可以发现,求不同全排列的问题其实是可以利用交换字符串元素来完成的;输出:["ab", "ba"]字符串长度在[1, 9]之间。输入:S = "qwe"输入:S = "ab"

zjshuster的博客 431

java回溯算法 无重复字符串的排列组合

问题描述 无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 例: 输入:S = “qwe” 输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”] (来源:力扣(LeetCode)) 问题分析 采用回溯算法,对决策树进行深度优先搜索 代码 List<String> returnList=new ArrayList(); public String[] permutation(String S) {

weixin_48391299的博客 421

LeetCode 面试题 08.08. 有重复字符串的排列组合

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。步骤 1 剪枝不完全,所以还需加上步骤 2。输出:[“eqq”,“qeq”,“qqe”]输出:[“ab”, “ba”]输入:S = “qqe”输入:S = “ab”

zheliku的博客 516
上一篇: 无重复字符串的排列组合
下一篇: 八皇后问题
Jipon
博客等级 码龄10年 24粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值