首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayList中字符串的置换(使用递归)

ArrayList中字符串的置换(使用递归)
EN

Stack Overflow用户
提问于 2022-05-04 07:21:28
回答 1查看 405关注 0票数 0

我已经试着弄清楚这个问题有一段时间了,只是不太明白我是如何创造预期的结果的。我已经成功地获得了唯一排列的输入和最大数量,现在我所需要的只是找出如何获得期望的字符串作为输出。我认为有更好的方法去做这件事。

投入: Julia Lucas Mia -1

预期产出:

茱莉亚,卢卡斯,米娅

朱莉娅,米娅,卢卡斯

卢卡斯,朱莉娅,米娅

卢卡斯,米娅,朱莉娅

米娅,朱莉娅,卢卡斯

米娅,卢卡斯,茱莉亚

代码语言:javascript
复制
import java.util.Scanner;
import java.util.ArrayList;

public class PhotoLineups {

    // TODO: Write method to create and output all permutations of the list of names.
        public static void printAllPermutations(ArrayList<String> permList, ArrayList<String> nameList){
        int size = nameList.size();
        int index = 0;

        for(int i = size; i > 1; i--)
            size = size * (i - 1);
        System.out.println("Size: " +size); //Temp

        if(index != size){
            for(int i = 0; i < nameList.size(); i++){
                
                index++;
            }
        }
    }

    public static void main(String[] args){
        Scanner scnr = new Scanner(System.in);
        ArrayList<String> nameList = new ArrayList<String>();
        ArrayList<String> permList = new ArrayList<String>();
        String name;
        int i = 0;
        
        // TODO: Read in a list of names; stop when -1 is read. Then call recursive method.
        while(i != -1){
            name = scnr.next();
            nameList.add(name);
            if(name.equals("-1"))
                i = -1;
        }
        nameList.remove(nameList.size() - 1);
        System.out.println("nameList: " + nameList); //Temp

        //Recursive
        printAllPermutations(permList, nameList);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-04 07:54:01

在这种情况下,递归意味着将问题一分为二。因此,算法将在循环中选择列表的名称,并将其与其他列表的排列组合起来。如果其余的是空的,你就得到了一个排列:你必须复制列表,因为它们是通过引用传递的.

代码语言:javascript
复制
public static void printAllPermutations(ArrayList<String> permList, ArrayList<String> nameList){

    if (nameList.isEmpty()) {
        System.out.println(String.join(", ", permList));
        return;
    }

    for(int i = 0; i < nameList.size(); i++) {
        ArrayList<String> localPermList = new ArrayList<>(permList);
        ArrayList<String> localNameList = new ArrayList<>(nameList);
        localPermList.add(nameList.get(i));
        localNameList.remove(nameList.get(i));
        printAllPermutations(localPermList, localNameList);

    }

}

编辑

复制yout代码,最好将循环编写为

代码语言:javascript
复制
    for(String name : nameList) {
        ArrayList<String> localPermList = new ArrayList<>(permList);
        ArrayList<String> localNameList = new ArrayList<>(nameList);
        localPermList.add(name);
        localNameList.remove(name);
        printAllPermutations(localPermList, localNameList);

    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72109249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档