我已经试着弄清楚这个问题有一段时间了,只是不太明白我是如何创造预期的结果的。我已经成功地获得了唯一排列的输入和最大数量,现在我所需要的只是找出如何获得期望的字符串作为输出。我认为有更好的方法去做这件事。
投入: Julia Lucas Mia -1
预期产出:
茱莉亚,卢卡斯,米娅
朱莉娅,米娅,卢卡斯
卢卡斯,朱莉娅,米娅
卢卡斯,米娅,朱莉娅
米娅,朱莉娅,卢卡斯
米娅,卢卡斯,茱莉亚
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);
}
}发布于 2022-05-04 07:54:01
在这种情况下,递归意味着将问题一分为二。因此,算法将在循环中选择列表的名称,并将其与其他列表的排列组合起来。如果其余的是空的,你就得到了一个排列:你必须复制列表,因为它们是通过引用传递的.
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代码,最好将循环编写为
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);
}https://stackoverflow.com/questions/72109249
复制相似问题