首页 > 其他分享 >【剑指 Offer】38. 字符串的排列

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

时间:2023-04-27 10:15:06浏览次数:31  
标签:38 String Offer int res set swap 字符串

【题目】

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

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof

【思路】

回溯法,剪枝,将数字数组传入,判断是否是最后一位,否则递归交换。

 

【代码】

class Solution {
    List<String> res = new LinkedList<>();
    char[] c;
    public String[] permutation(String s) {
        c = s.toCharArray();
        dfs(0);
        return res.toArray(new String[res.size()]);
    }
    void dfs(int x) {
        if(x == c.length - 1) {
            res.add(String.valueOf(c));      // 添加排列方案
            return;
        }
        HashSet<Character> set = new HashSet<>();
        for(int i = x; i < c.length; i++) {
            if(set.contains(c[i])) continue; // 重复,因此剪枝
            set.add(c[i]);
            swap(i, x);                      // 交换,将 c[i] 固定在第 x 位
            dfs(x + 1);                      // 开启固定第 x + 1 位字符
            swap(i, x);                      // 恢复交换
        }
    }
    void swap(int a, int b) {
        char tmp = c[a];
        c[a] = c[b];
        c[b] = tmp;
    }
}

 

标签:38,String,Offer,int,res,set,swap,字符串
From: https://www.cnblogs.com/End1ess/p/17358130.html

相关文章

  • 字符串补充
    1、startswith(是否以某个东西开头)/endswith(是否以某个东西结尾)#判断是都是al开头#方式一:name="alxe"#第一种方法val=name[0:2]ifval=="al": print('是以"al"开头')else:print('不是以"al开头"')#方式二:name="alxe"......
  • Sql 给表中插入有规律的字符串
    需求:表中生成有规律的字符A001 001 ............A001 002 ..............A001 060 .................A002 001.............A002 002.............A002 060 ........................A020 001.............A020 002.........A020 060 ..........
  • 583. 两个字符串的删除操作
    classSolution{public:intf[510][510];//f[i][j]表示将s1前i个字符和s2前j个字符的最长公共子序列长度intminDistance(stringword1,stringword2){intn=word1.size(),m=word2.size();word2=''+word2;word1=''+word1;for(inti=......
  • Java中关于String类以及字符串拼接的问题
    String类部分源码//被final修饰不可被继承publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{//String维护char[]所以不可修改privatefinalcharvalue[];创建String对象的方式str1它首先会去方法区的常量池......
  • 【哈希表】LeetCode 767. 重构字符串
    题目链接767.重构字符串思路先用哈希表统计出出现次数最多的字符,如果这个次数大于一半,说明这个字符总会挨在一起,直接返回""。如果不超过一半,则先把字符填在偶数位置(先填出现次数最多的字符),偶数位置填满了再填奇数位置。代码classSolution{publicStringreorganize......
  • 把数字翻译成字符串
    classSolution{public:boolcheck(chara,charb){intnum=(a-'0')*10+(b-'0');if(num>=10&&num<=25)returntrue;returnfalse;}intgetTranslationCount(strings){intf......
  • python 快速替换csv数据集字符串列表中的表情符号为空,asyncio,re,pandas
     传统的字符串列表替换字符串使用遍历非常慢比如下面这段代码,如果处理几十万或上百万的数据集时,会非常的慢,几小时几天都可能importrep=re.compile(u'['u'\U0001F300-\U0001F64F'u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55\U00010000-\U0010ffff]+')#text="超详细修......
  • 使用pycuda替换字符串,使用cuda替换字符串
    写一个python的cuda程序,实现字符串列表的字符串替换,把所有的123替换成xinyuuliu 以下是一个简单的PythonCUDA代码示例,用于实现字符串列表的字符串替换。它使用了NVIDIACUDA编程模型的一些基本概念和语法。#导入必要的模块importpycuda.autoinitimportpycuda.drive......
  • PowerBuilder常用字符串函数
    Fill()功能建立一个由指定字符串填充的指定长度的字符串。语法Fill(chars,n)参数chars:string类型,指定用于重复填充的字符串n:long类型,指定由该函数返回的字符串的长度返回值String。函数执行成功时返回n个字符的字符串,该字符串以参数chars中的字符串重复填充而成。如果参数cha......
  • C# 小数转百分比以及小数转字符串精确小数点
    模拟游戏中相乘减伤计算staticvoidTest(){Calc(newdouble[]{0.1,0.3,0.2,0.17,0.5});}staticvoidCalc(double[]arr){doubletotal=1;foreach(vardinarr){total*=(1-d......