首页 > 其他分享 >递归方式迭代字符串全排列

递归方式迭代字符串全排列

时间:2022-10-23 20:58:29浏览次数:47  
标签:递归 temp newStr length 字符串 resList array 迭代

方式一:

private void sub(char[] array,  char[] temp,
                     ArrayList<String> resList) {

        for (int i = 0; i < array.length ; i++) {
            if (temp[i] != 0) {
                continue;
            }
            temp[i] = array[i];
            newStr += temp[i];
            if (newStr.length() == array.length) {
                if (!resList.contains(newStr)) {
                    resList.add(newStr);
                    count++;
                    System.out.println(count+";"+newStr);
                }
//回溯 temp[i] = 0; newStr = newStr.substring(0, newStr.length() -1); return; } sub(array, temp, resList);
//回溯 temp[i] = 0; newStr = newStr.substring(0, newStr.length() -1); } }

  这一种方式,由于判断 字符串长度达到最大长度,加入reslist 的逻辑在 加入新元素之后,所以退出时要回溯

方式二:

    private void sub(char[] array,  boolean[] temp,
                     ArrayList<String> resList) {

        if (newStr.length() == array.length) {
            if (!resList.contains(newStr.toString())) {
                resList.add(newStr.toString());
            }
            return;
        }

        for (int i = 0; i < array.length ; i++) {
            if (temp[i] == true) {
                continue;
            }
            temp[i] = true;
            newStr.append(array[i]);
            //迭代后面排列
            sub(array, temp, resList);
            //回溯
            temp[i] = false;
            newStr = newStr = newStr.deleteCharAt(newStr.length() - 1);

        }

    }

  这一种方式把判断字符串长度达到最大,加入reslist 放在下一轮迭代。由于在下一轮迭代时没有加入新元素直接退出,退出后执行了后面的回溯逻辑。

       所以一二中方式效果相同

标签:递归,temp,newStr,length,字符串,resList,array,迭代
From: https://www.cnblogs.com/yanher/p/16819481.html

相关文章

  • Leetcode第1768题:交替合并字符串(Merge Strings Alternately)
    解题思路:使用两个指针i和j分别指向两个字符串首位。循环中一次进行如下判断及操作:如果i没有超出word1的长度,就将word[i]加入返回结果中。然后i指针后移一位。如果j没有......
  • 用递归实现整数拆分
    题目: 题目分析:将给定整数n无序拆分成最大数为k的拆分数,求拆分方案个数如当n=4,k=1时仅有一种拆分方法:4=1+1+1+1;当n=4,k=2时有:4=1+1+1+1;4=1+1+2;4=2+2;这三种拆分方法......
  • Jquery 如何替换html字符串中标签属性值 ??
    如何利用JQuery替换HTML字符串中的属性值呢?如html字符串有很多img标签,现在需要修改img的src值varhtml="<divstyle="text-align:center;font-size:40px;font-fami......
  • 从键盘接收一行字符串,字符串中只包含数字和空格,统计其中所有的手机号码数量。比如输入
    publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); System.out.println("请输入手机号码:"); Strings=input.nextLine();//获取输入的......
  • 字符串
    字符串字符串概述字符串也是一个数据结构(串),将同样的内容串在一块。因为在对应的js里面字符串属于一个值类型(值类型是常量常量是不能变)。字符串是不能改变的。结合昨天提......
  • 正则表达式匹配不出现指定字符串的字符串
    比如匹配不包含ab的字符串,使用^((?!ab)[\s\S])*$。参考:正则表达式匹配不包含某些字符串的技巧、HowtodeleteallcommentlinesinIDEA?......
  • 动态规划递归公式理解
    dp[i][j]表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。递推公式:dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是......
  • 第19组 chap5 函数与递归 学习总结
    本周我们主要学习了c语言中的自定义函数与递归算法。我们了解到C语言中算法主要是依靠函数而实现的,而自定义函数与函数间的相互调用能帮助我们更好地实现目标。   ......
  • 交替合并字符串
    题目给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回......
  • 1768. 交替合并字符串
    给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合......