力扣 矩陣中的幻方

2021-10-05 17:43:09 字數 1627 閱讀 5695

矩陣中的幻方

3 x 3 的幻方是乙個填充有從 1 到 9 的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。

給定乙個由整數組成的 grid,其中有多少個 3 × 3 的 「幻方」 子矩陣?(每個子矩陣都是連續的)。

輸入: [[4,3,8,4],

[9,5,1,9],

[2,7,6,2]]

輸出: 1

解釋:

下面的子矩陣是乙個 3 x 3 的幻方:

438951

276而這乙個不是:

384519

762總的來說,在本示例所給定的矩陣中只有乙個 3 x 3 的幻方子矩陣。

這道題定義了一種神奇正方形,是乙個3x3大小,且由1到9中到數字組成,各行各列即對角線和都必須相等。那麼其實這個神奇正方形的各行各列及對角線之和就已經被限定了,必須是15才行,而且最中間的位置必須是5,否則根本無法組成滿足要求的正方形。博主也沒想出啥特別巧妙的方法,就老老實實的遍歷所有的3x3大小的正方形唄,我們寫乙個子函式來檢測各行各列及對角線的和是否為15,在呼叫子函式之前,先檢測一下中間的數字是否為5,是的話再進入子函式。在子函式中,先驗證下該正方形中的數字是否只有1到9中的數字,且不能由重複出現,使用乙個一維陣列來標記出現過的數字,若當前數字已經出現了,直接返回true。之後便是一次計算各行各列及對角線之和是否為15了,若全部為15,則返回true,參見**如下:

class solution 

}return res;

}bool isvalid(vector>& grid, int i, int j)

}if (15 != grid[i][j] + grid[i][j + 1] + grid[i][j + 2]) return false;

if (15 != grid[i + 1][j] + grid[i + 1][j + 1] + grid[i + 1][j + 2]) return false;

if (15 != grid[i + 2][j] + grid[i + 2][j + 1] + grid[i + 2][j + 2]) return false;

if (15 != grid[i][j] + grid[i + 1][j] + grid[i + 2][j]) return false;

if (15 != grid[i][j + 1] + grid[i + 1][j + 1] + grid[i + 2][j + 1]) return false;

if (15 != grid[i][j + 2] + grid[i + 1][j + 2] + grid[i + 2][j + 2]) return false;

if (15 != grid[i][j] + grid[i + 1][j + 1] + grid[i + 2][j + 2]) return false;

if (15 != grid[i + 2][j] + grid[i + 1][j + 1] + grid[i][j + 2]) return false;

return true;

}};

力扣 矩陣中的幻方

矩陣中的幻方 3 x 3 的幻方是乙個填充有從 1 到 9 的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。給定乙個由整數組成的 grid,其中有多少個 3 3 的 幻方 子矩陣?每個子矩陣都是連續的 輸入 4,3,8,4 9,5,1,9 2,7,6,2 輸出 1 解...

840 矩陣中的幻方

3 x 3 的幻方是乙個填充有從 1 到 9的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。給定乙個由整數組成的grid,其中有多少個 3 3 的 幻方 子矩陣?每個子矩陣都是連續的 示例 輸入 4,3,8,4 9,5,1,9 2,7,6,2 輸出 1解釋 下面的子矩...

力扣 矩陣中的路徑

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。連續 深度搜尋 int row,colum,length bool dfs char b...