簡體   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