繁体   English   中英

如何验证2D数组/网格是否为n ^ 2 * n ^ 2

[英]How to verify if a 2D array/grid is n^2*n^2

如何验证二维数组是否为2 * n 2网格? 基本上验证其对于Sudoku的有效网格。 因此,应该是4 * 4(2 2 * 2 2 )网格,以及9 * 9(3 2 * 3 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;
}

任何帮助表示赞赏。 谢谢

您的验证功能将如下所示:

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;

}

因此,鉴于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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM