67,512
社区成员
发帖
与我相关
我的任务
分享
var z=1;
var a = [[1, 2, 3], [4, 5], [6, 7]];
var total = 1;
//总数:公倍数
for (var i = 0; i < a.length; i++) {
total *= a[i].length;
}
var info = [];
//初始化
for (var i = 0; i < total; i++) {
info.push('');
}
//生成
for (var j = a.length - 1; j >= 0; j--) {
var v = a[j].length;
for (var i = 0; i < total; i++) {
var y =Math.floor(i/z) % v;
info[i] =a[j][y] + "|" + info[i];
}
z *= v;
}
console.log(info);[code=javascript]
[/code]
void permutation(int **a, int x, int y)
{
int total;
int *info = (int *)malloc(sizeof(int) * x);
int i, j;
total = y;
for (i = 1; i < x; i++)
{
total *= y;
}
i = 0;
for (i = 0; i < total; i++)
{
int val = i;
for (j = x - 1; j >= 0; j--)
{
info[j] = val % y;
val = val / y;
}
for (j = 0; j < x; j++)
{
printf("%d, ", a[j * y + info[j]]);
}
printf("\n");
}
free(info);
}
int main()
{
int A[3][4] = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12} };
permutation((int **)A, 3, 4);
return 0;
}
输出
1, 5, 9,
1, 5, 10,
1, 5, 11,
1, 5, 12,
1, 6, 9,
1, 6, 10,
1, 6, 11,
1, 6, 12,
1, 7, 9,
1, 7, 10,
1, 7, 11,
1, 7, 12,
1, 8, 9,
1, 8, 10,
1, 8, 11,
1, 8, 12,
2, 5, 9,
2, 5, 10,
2, 5, 11,
2, 5, 12,
2, 6, 9,
2, 6, 10,
2, 6, 11,
2, 6, 12,
2, 7, 9,
2, 7, 10,
2, 7, 11,
2, 7, 12,
2, 8, 9,
2, 8, 10,
2, 8, 11,
2, 8, 12,
3, 5, 9,
3, 5, 10,
3, 5, 11,
3, 5, 12,
3, 6, 9,
3, 6, 10,
3, 6, 11,
3, 6, 12,
3, 7, 9,
3, 7, 10,
3, 7, 11,
3, 7, 12,
3, 8, 9,
3, 8, 10,
3, 8, 11,
3, 8, 12,
4, 5, 9,
4, 5, 10,
4, 5, 11,
4, 5, 12,
4, 6, 9,
4, 6, 10,
4, 6, 11,
4, 6, 12,
4, 7, 9,
4, 7, 10,
4, 7, 11,
4, 7, 12,
4, 8, 9,
4, 8, 10,
4, 8, 11,
4, 8, 12,
import java.util.Arrays;
public class RecursivePermutation {
public static void main(String[] args) {
int[][] arr = { { 1, 3, 5, 7, 9 }, { 2, 4, 6 }, { 8, 0 } };
permutation(arr, 0, ""); // 第一次执行时需要额外指定两个固化参数
permutation(arr); // 第一次执行时比较简单
}
/**
* 递归,以字符串来传递递归前缀
* @param arr 原始数组
* @param pos 当前递归位置
* @param prefix 已递归前缀
*/
public static void permutation(int[][] arr, int pos, String prefix) {
if (pos < arr.length) {
for (int i = 0; i < arr[pos].length; i++) {
permutation(arr, pos + 1, prefix + arr[pos][i] + ",");
}
} else {
System.out.println(prefix.substring(0, prefix.length() - 1));
}
}
/**
* 递归,以数组来传递完整递归信息
* @param arr 原始数组
* @param pos 递归信息
*/
public static void permutation(int[][] arr, int... pos) {
if (pos.length < arr.length) {
int[] newPos = Arrays.copyOf(pos, pos.length + 1);
for (int i = 0; i < arr[pos.length].length; i++) {
newPos[pos.length] = i;
permutation(arr, newPos);
}
} else {
for (int i = 0; i < pos.length; i++) {
System.out.print(arr[i][pos[i]] + " ");
}
System.out.println();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] arr = { { 1, 3, 5, 7, 9, 10 },
{ 1, 4, 8, 10 },
{ 1, 5, 10 }};
for(int i = 0; i < arr[0].length; i++){
for(int j = 0; j < arr[1].length; j++){
for(int k = 0; k < arr[2].length; k++){
System.out.print("["+arr[0][i]+","+arr[1][j]+","+arr[2][k]+"]");
}
System.out.println();
}
System.out.println();
}
}