我在寻找一种简单的方法来获得一个ArrayList中元素的k-排列。
我有一个对象X的arrayList,我想根据值k得到元素的所有可能的排列(顺序计数)。
到目前为止,我只找到了所有元素(主要是整数值)的组合和排列,但没有找到数组列表中对象的k排列的解决方案。
有人能帮我吗?
到目前为止,我找到了这个,但我不知道如何适应我的情况:
public static void perm2(String s, int k)
{
perm2("", s, k);
}
public static void perm2(String prefix, String s, int k)
{
int N = prefix.length();
int M = s.length();
if(N == k) System.out.println(prefix);
else
{
for(int i = 0; i < M; i++)
perm2(prefix+s.charAt(i), s.substring(0, i) + s.substring(i+1, M), k);
}
}
public static void main(String[] args)
{
String alphabet = "123";
int N = alphabet.length();
int K = 2;
String elements = alphabet.substring(0, N);
perm2(elements, K);
}
发布于 2018-10-16 05:49:07
据我所知,您希望从长度为n
的List
生成k
元素的所有排列,其中n >= k
。
static <E> void permK(List<E> p, int i, int k)
{
if(i == k)
{
System.out.println(p.subList(0, k));
return;
}
for(int j=i; j<p.size(); j++)
{
Collections.swap(p, i, j);
permK(p, i+1, k);
Collections.swap(p, i, j);
}
}
测试:
public static void main(String[] args)
{
permK(new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)), 0, 3);
}
输出:
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 2]
[1, 3, 4]
[1, 3, 5]
[1, 4, 3]
[1, 4, 2]
[1, 4, 5]
[1, 5, 3]
<snip>
[5, 3, 1]
[5, 4, 3]
[5, 4, 2]
[5, 4, 1]
[5, 1, 3]
[5, 1, 4]
[5, 1, 2]
https://stackoverflow.com/questions/52819397
复制相似问题