如何找到所有可能的数字用递归方法

问题描述:

我想写一个打印这些 号码的所有可能安排一个递归方法,整数1至9如何找到所有可能的数字用递归方法

中的三行三列的网格随机排列。例如:

6 2 1 

5 4 7 

3 9 8 

对不起,我没有任何代码,因为这对我很困难。

public class Test { 

public static void main (String[] args){ 
    String x = "123456789"; 
    System.out.println(test(x,0)); 


} 
public static String test(String x , int y){ 

    if(x.length()==1)return ""; 

    return x.charAt(y)+test(x.substring(y),y); 
} 
+0

[算法找到下一个给定的字符串的更大排列]可能的重复(http://stackoverflow.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-given-string ) – Prune

+0

如果您搜索“Java阵列排列”,您会发现许多针对此问题的通用解决方案。 – Prune

有实现这样的事情很多方面的价值,这是一个例子。我会用int[]代替String为方便起见:

public static void main(String[] args) { 
    nextPermutation(new int[9], 0, new boolean[9]); 
} 

public static void nextPermutation(int[] perm, int index, boolean[] alreadyUsed) { 
    if(index == perm.length) { 
     //the permutation is complete 
     //you can store it or print it 
    } else { 

     for(int i = 0 ; i < alreadyUsed.length ; i++) { 
      if(alreadyUsed[i]) continue; 

      perm[index] = i+1; 

      boolean[] newAlreadyUsed = Arrays.copyOf(alreadyUsed, alreadyUsed.length); 
      newAlreadyUsed[i] = true; 
      nextPermutation(Arrays.copyOf(perm, perm.length), index+1, Arrays.copyOf(newAlreadyUsed, newAlreadyUsed.length)); 
     } 
    } 
} 

这将产生1-9所有可能的组合。该算法的思想是,您可以跟踪您已使用的数字,通过循环运行并选择所有可用的数字。

注意,重要的是要通过副本permalreadyUsed,否则你只会传递相同的数组,并覆盖以前的排列。

将值传递给数组,随机化并创建一个循环来生成矩阵。 循环:做一个通用的循环开始产生与I0矩阵,J0喜欢的位置I1,第j1 matrixand添加阵列

int j = 0; 
for(int i = 0; i <= YOURARRAY.length(); i++) 
    { 
System.out.println( i POSITIONOFARRAY ); 
j+1 
    }