我有一句话,
I love java coding
我需要编写一个函数来返回句子中所有可能的单词排列的数组列表,即
I java love coding
I coding love java
.........
我已经将句子拆分成了一个ArrayList,现在却不知道如何有效地完成任务。
C++
有一个函数nextPermutaion()
,它提供了开箱即用的解决方案。 java是否提供类似的东西。如果不是,那将是一种有效的方法来完成这项工作。
答案 0 :(得分:0)
此问题等同于生成一组n
个数字的所有可能排列,其中n
是句子中的单词数。
将句子转换为ArrayList<String> words
个单词,然后生成数组{0,1,...,n-1}
的排列,以便每个排列arr
代表句子中单词的排列:words[arr[0]], ..., words[arr[n-1]]
至于计算数组的所有排列的问题,在SO上有很多例子。
以下是用于生成列表的所有排列的代码示例(由@YevgenYampolski从this answer获取)。该代码计算List<Integer>
的所有排列,并且可以轻松调整以计算List<String>
(ArrayList<String>
实现List<String>
)的排列。
public class Permute{
static void permute(java.util.List<Integer> arr, int k){
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println(java.util.Arrays.toString(arr.toArray()));
}
}
public static void main(String[] args){
Permute.permute(java.util.Arrays.asList(3,4,6,2,1), 0);
}
}
答案 1 :(得分:0)
AFAIK java核心集合不提供任何排列函数(就像你在Python集合类中找到的那样)。
Guava(google java libs)提供可迭代排列作为集合2(documented here)的一部分。
如果您不想使用第三方库,则必须使用自己的算法。