有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java一个句子中所有可能的单词排列

我有一句话

I love java coding

我需要编写一个函数,返回句子中所有可能的单词排列的数组列表,即

I java love coding
I coding love java
.........

我已经把这个句子分成了一个列表,现在不知道如何有效地完成这项任务。 C++有一个函数nextPermutaion(),它提供了一个现成的解决方案。java是否提供了类似的功能。如果不是的话,什么是实现这一目标的有效方法


共 (1) 个答案

  1. # 1 楼答案

    这个问题相当于生成一组n数的所有可能排列,其中n是句子中的单词数

    将句子转换为ArrayList<String> words个单词,然后生成数组{0,1,...,n-1}的排列,以便每个排列arr代表句子中单词的排列:words[arr[0]], ..., words[arr[n-1]]

    至于计算一个数组的所有置换的问题,这里有很多这样的例子

    下面是一个生成列表所有排列的代码示例(取自@YevgenYampolskiy的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);
        }
    }