矩陣中的幻方
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...