我正在寻找一种简单的方法来在一个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);
}
答案 0 :(得分:0)
好吧,很多话。根据标题,您希望获得给定数组的k-th
有序排列。
示例。
abcde
abcde
abced
edcba
kth
排列您有两种解决方法:
答案 1 :(得分:0)
据我了解,您想根据长度为k
的{{1}},其中List
来生成n
元素的所有排列。
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);
}