当前位置: 首页 > 知识库问答 >
问题:

使用嵌套循环获取字符串的排列

梁丘璞瑜
2023-03-14

我写了一个递归方法,使用嵌套循环打印给定字符串的所有排列。它打印所有排列,但不止一次有人能找出问题以及改变什么条件来解决这个问题吗?

public static String swap(String x,int a,int b){
    char list[]=x.toCharArray();
    char tmp=x.charAt(a);
    list[a]=list[b];
    list[b]=tmp;
    return new String(list);
}
public static void perm(String x,String base){
    if(base.length()==3)
        System.out.println(base);
    for(int i=0;i<x.length();i++)
        for(int j=i;j<x.length();j++){
            String tmp=swap(x,i,j);
            perm(tmp.substring(1),base+tmp.charAt(0));
        }
}

示例:输入:“abc”。输出:abc acb abc bac bca bac cba cba abc acb abc acb abc acb abc acb abc abc。

共有1个答案

洪国兴
2023-03-14

下面是我根据你的代码做的修改版本。

public static void main(String[] args) {
    String str = "abc";
    char[] chars = str.toCharArray();
    perm(chars, 0);
}

public static void swap(char[] x, int a, int b) {
    char tmp = x[a];
    x[a] = x[b];
    x[b] = tmp;
}

public static void perm(char[] x, int idx) {
    if (idx == x.length) {
        for (int i = 0; i < x.length; i++)
            System.out.print(x[i]);
        System.out.println();
    }

    for (int i = idx; i < x.length; i++) {
        swap(x, idx, i);
        perm(x, idx + 1);
        swap(x, idx, i);
    }
}
 类似资料:
  • 我有一个这样的数组 我想做的是前面的模型,为其数量绘制徽标,因此三星=3,索尼=7,以此类推,将绘制3个索尼徽标和7个三星徽标。 我想出了这样的办法 但是当然,所有这些都是为了每个数组条目,呼应出名称,所以我最终打印了5个三星,打印了5个索尼,等等。 如何使其使用 qty 数组的值而不是条目数?

  • 问题内容: 我有一段代码,但是我想提高性能。我的代码是: matrix2是4维np数组,而matrix1是2d数组。 我想通过使用np.tensordot(matrix1,matrix2)加快此代码的速度,但是后来我迷路了。 问题答案: 您可以只使用jit编译器 您的解决方案一点也不差。我唯一更改的是索引和变量循环范围。如果您有numpy数组和过多的循环,则可以使用编译器(Numba),这确实很简

  • Python 不仅支持 if 语句相互嵌套,while 和 for 循环结构也支持嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,甚至 while 中有 for 或者 for 中有 while 也都是允许的。 当 2 个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为 外层循环或 外循环,位于内层的循环结构常简

  • 这是我的代码。我遇到的问题是,我希望将HP在我的PHP代码中的数字转换为我的HP HTML代码,以及与Cylinder相同的内容。我已经想好了其他的东西,但说到这一部分我就卡住了

  • 本文向大家介绍MATLAB嵌套循环,包括了MATLAB嵌套循环的使用技巧和注意事项,需要的朋友参考一下 示例 可以嵌套循环,以在另一个迭代任务中执行迭代任务。考虑以下循环: 我们使用2个迭代器来显示abc和中元素的所有组合1:m,从而得出: 我们还可以使用嵌套循环来组合每次要完成的任务和几次迭代中要完成的任务: 这里我们要计算所有的斐波那契数列,但是n每次只显示第一个元素,所以我们得到 我们可以做

  • 嵌套循环就是在一个循环中还有一个循环,内部循环在外部循环体中.在外部循环的每次执行过程中都会触发内部循环,直到内部循环执行结束.外部循环执行了多少次,内部循环就完成多少次.当然,不论是外部循环或内部循环的break语句都会打断处理过程. 例子 10-19. 嵌套循环 1 #!/bin/bash 2 # nested-loop.sh: 嵌套的"for" 循环. 3 4 out