gpt4 book ai didi

arrays - 字符串的排列不适用于整数数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:35 26 4
gpt4 key购买 nike

所以我在下面有工作字符串烫发代码

public static List<String> myperm( String s ){
List<String> l = new ArrayList<String>();
mypermImpl("", s, l );
return l;
}

public static void mypermImpl( String built, String other, List<String> l ){
if (other.length() == 0 ){
l.add( built );
}
for ( int i=0; i<other.length(); i++ ){
String leftover = other.substring(0,i) + other.substring(i+1);
mypermImpl(built+other.charAt(i), leftover, l );
}
}

用“123”调用会返回

123
132
213
231
312
321

问题是如果我使用它作为模型对 int 数组执行相同的操作,他们我不确定为什么这不起作用,想法?

public static List<List<Integer>> myperm( int [] array ){
List<List<Integer>> l = new ArrayList<List<Integer>>();
List<Integer> other = new ArrayList<Integer>();
for ( int i : array ){
other.add( i );
}
mypermImpl(new ArrayList<Integer>(), other, l );
return l;
}

public static void mypermImpl( List<Integer> built, List<Integer> other, List<List<Integer>> l){

if (other.size() == 0 ){
l.add( new ArrayList(built) );
built.clear();
}

for ( int i=0; i<other.size(); i++ ){
List<Integer> leftOver = new ArrayList<Integer>(other);

leftOver.remove(i);

built.add(other.get(i));
mypermImpl(built, leftOver, l);

}
}

产生以下内容

[1, 2, 3]
[3, 2]
[2, 1, 3]
[3, 1]
[3, 1, 2]
[2, 1]

想法??

谢谢

最佳答案

您的代码中的问题是您在满足基本条件时清除了 built 数组。因为 Java 将数组作为引用传递,所以当您尝试在第二次迭代中插入 3 时,您的 built 数组为空。

你应该在传递之前复制你的built数组

mypermImpl(built+other.charAt(i), leftover, l );

模拟上面那行在传递之前创建另一个字符串的行为。

关于arrays - 字符串的排列不适用于整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49866431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com