在数组中存储特定的数字模式

Storing a specific number pattern in an array

我正在研究一个问题,想生成一个特定的模式 这是

1000
1100
1110
1111
0100
0110
0111
0010
0011
0001

使用递归和 for 循环,但是当我编写代码时,它在线程 "main" java.lang.WhosebugError

中给了我一个异常

public class NQueenProblem {
    final static int N = 8;

    void printSolution(int board[][])
    {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++)
                System.out.print(" "+board[i][j]+" ");
            System.out.println();
        }
    }
    void solveNQUtil(int board[][], int col)
    {
        for (int i = 0; i < N; i++) {
            solveNQUtil(board, col + 1);
        }
    }
    public static void main(String[] args) {

        NQueenProblem Queen = new NQueenProblem();
        int board[][] = new int[N][N];
        Queen.solveNQUtil(board, 0);
    }
}

您可以通过修改 solveNQUtil 方法来克服错误,如下所示。 不保证您一定会得到想要的答案。

void solveNQUtil(int board[][], int col)
   {
      if (col == N)
         return;

      for (int i = 0; i < N; i++)
      {
         solveNQUtil(board, col + 1);
      }
   }

有一个递归函数,它打印出以多少个零和多少列开头的行,并让它以一个额外的前导零调用自身。另外,跟踪下一个要编辑的行。

如果前导零的数量等于列数,return因为你完成了:

public class NQueenProblem {
    static void printSolution(int board[][])
    {
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++)
                System.out.print(" "+board[i][j]+" ");
            System.out.println();
        }
    }    
    static void solveNQUtil(int leadingZeros, int startingRow, int board[][])
    {
        int columns = board[0].length;

        if (leadingZeros == columns) return;

        for (int ones = 1; leadingZeros+ones <= columns ; ones++) 
        {
            int curRow = startingRow + ones - 1;

            for (int i=0 ; i<ones ; i++) board[curRow][i+leadingZeros] = 1;
        }

        solveNQUtil(leadingZeros + 1, startingRow + columns - leadingZeros, board);
    }

    public static void main(String[] args) 
    {
        int totalColumns = 4;
        int rows = (int)((totalColumns+1)*totalColumns*0.5); //

        int board[][] = new int[rows][totalColumns];

        solveNQUtil(0, 0, board);
        printSolution(board);
    }
}