生成特定数字模式

问题描述 投票:0回答:2

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

1000
1100
1110
1111
0100
0110
0111
0010
0011
0001

使用递归和for循环,但是当我编写代码时,它在线程“ main” java.lang.StackOverflowError中给了我异常


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);
    }
}

我正在研究一个问题,并希望使用递归和for循环生成一个特定的模式,即1000 1100 1110 1111 0100 0110 0111 0010 0011 0001,但是当我编写代码时,它给了我一个...]]] >>

您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。

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

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

具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。如果前导零的数量等于列的数量,请返回,因为您已经完成:

public class NQueenProblem {    
    static void solveNQUtil(int leadingZeros, int columns)
    {
        if (leadingZeros == columns) return;

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

            // print leading zeros
            for (int i=0 ; i<leadingZeros ; i++) System.out.print("0");

            // print ones
            for (int i=0 ; i<ones ; i++) System.out.print("1");

            // print trailing zeros
            for (int i=0 ; i<trailingZeros ; i++) System.out.print("0");

            System.out.println();
        }

        solveNQUtil(leadingZeros + 1, columns);
    }

    public static void main(String[] args) 
    {
        int totalColumns = 4;

        solveNQUtil(0, totalColumns);
    }
}
java algorithm design-patterns backtracking array-algorithms
2个回答
0
投票

您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。


0
投票

具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。如果前导零的数量等于列的数量,请返回,因为您已经完成:

public class NQueenProblem {    
    static void solveNQUtil(int leadingZeros, int columns)
    {
        if (leadingZeros == columns) return;

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

            // print leading zeros
            for (int i=0 ; i<leadingZeros ; i++) System.out.print("0");

            // print ones
            for (int i=0 ; i<ones ; i++) System.out.print("1");

            // print trailing zeros
            for (int i=0 ; i<trailingZeros ; i++) System.out.print("0");

            System.out.println();
        }

        solveNQUtil(leadingZeros + 1, columns);
    }

    public static void main(String[] args) 
    {
        int totalColumns = 4;

        solveNQUtil(0, totalColumns);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.