如何验证2D阵列/网格是否为n ^ 2 * n ^ 2

时间:2017-08-25 07:07:30

标签: java arrays

如何验证2d阵列是否为n 2 * n 2 网格?基本上验证它是Sudoku的有效网格。所以4 * 4(2 2 * 2 2 )网格应该是真的,以及9 * 9(3 2 * 3 < SUP> 2 )。我猜我应该取每个数组D的长度,并检查它们是否是正方形。但它不能成为任何一个方块。所以我精神上陷入困境。请不要只是说它之前被问过并链接过去的数独求解器问题,因为我只想验证它是否是一个有效的网格来玩数独(现在)。我见过的所有过去的问题总是验证9 * 9的内容,而不是检查网格的实际大小。

到目前为止,我所有的都是

public Sudoku(int[][] g) {
theGrid = g;
}
private int[][] theGrid;

public boolean isValid()  {
if (theGrid.length == 0)
  return true;
if(theGrid[0].length!=theGrid[1].length)//sides arent the same length
  return false;
}

任何帮助表示赞赏。感谢

2 个答案:

答案 0 :(得分:1)

你的验证功能是这样的:

public boolean isValid() {
    if ( theGrid.length == 0 ) {
        return true;
    }

    if ( theGrid.length != theGrid[ 0 ].length ) {//sides arent the same length
        return false;
    }

    final int n = theGrid.length;
    final double sqrt = Math.sqrt( n );

    return ( ( int ) sqrt ) == sqrt;

}

答案 1 :(得分:0)

因此,考虑到java中的array[][]可以有不同的行大小,检查每一行会更好:

static boolean isValid(int[][] array) {
    if(array.length == 0) return false;

    double sqrt = Math.sqrt(array.length);
    int x = (int) sqrt;

    if(Math.pow(sqrt,2) != Math.pow(x,2)) return false;

    return Arrays.stream(array).filter(ints -> ints.length != array.length).count() == 0;
}