数组的Java排列

时间:2016-04-02 13:14:09

标签: java algorithm

我有一个数组:

String wordArr[]=new String[3];

    [1 2 3]

我想用上面的所有组合形成数组。

称。,

123 132 213 231 321 312

有人能给我一个关于如何在java中找到所需数组和逻辑的想法吗?

弄清楚如何使用所有可能的组合迭代数组。假如我第一次用123迭代然后下次我应该遍历132和213等等......

2 个答案:

答案 0 :(得分:2)

这是用于生成任何数组 a

的排列的伪代码
Array permutations(a):
    if size(a) == 0 then return [];
    else:
        Array result;
        for i in range(size(a)):
            for t in permutations(a.remove(i)):
                result.push(Array(a[i]) + t)
        return result

希望这是有道理的,我会尝试为此制作java代码,并尽快上传。

答案 1 :(得分:1)

backtracking应用于排列的实现是很有用的。基本思路是,对于从0到数组长度的索引loc,枚举arr[loc]的所有可能选择

我在Java中实现了以下功能,但它可以用任何语言完成。

import java.util.*;

public class PermutationTest{

    private static void swap(char[] arr, int i, int j) {
        char tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    private static void permutations(char[] arr, int loc, int len, ArrayList<String> result) {
        if (loc == len) {
            result.add(new String(arr));
            return;
        }

        // Pick the element to put at arr[loc]
        permutations(arr, loc + 1, len, result);
        for (int i = loc + 1; i < len; i++) {
            // Swap the current arr[loc] to position i
            swap(arr, loc, i);
            permutations(arr, loc + 1, len, result);
            // Restore the status of arr to perform the next pick
            swap(arr, loc, i);
        }
    }

    public static ArrayList<String> permutations(String str) {
        ArrayList<String> result = new ArrayList<String>();
        if (str.length() == 0) { return result; }
        permutations(str.toCharArray(), 0, str.length(), result);
        return result;
    }

    public static void main(String []args){
        ArrayList<String> result = permutations("123");
        for (String str : result) {
            System.out.println(str);   
        }
    }
}