840 矩陣中的幻方

2021-10-06 05:18:50 字數 1748 閱讀 6124

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 的幻方子矩陣。

1 <= grid.length <= 101 <= grid[0].length <= 100 <= grid[i][j] <= 15

題目要求1-9組成3*3的矩陣,每個數字都要用上,所以對應的每行每列值都為15, 故中間值須為5

這樣可以去除大部分無用運算

其他只要注意邊界條件,依次判斷即可

class solution 

int total = 15;

int count = 0;

for(int i = 2; i < grid.size(); ++i)

return count;

}void judgecol(vector>& grid, int row, int total, int col, int& count)

vectordict(10, false);

bool equal = lines(grid, row_begin, row, col - 2, col, total, dict);

bool not_all_used = allnumbernotused(dict);

if (!equal || not_all_used)

int s = grid[row_begin][col - 2] + grid[row_begin + 1][col - 1] +

grid[row_begin + 2][col];

if (s != total)

int t = grid[row_begin][col] + grid[row_begin + 1][col - 1] +

grid[row_begin + 2][col - 2];

if (t != total)

count += 1;

col += 1;}}

bool allnumbernotused(vector& dict)

}return false;

}bool lines(vector>& grid, int s_begin, int s_end, int t_begin,int t_end, int total, vector& dict)

s += grid[i][j];

dict[grid[i][j]] = true;

}if (s != total)

}for (int j = t_begin; j <= t_end; ++j)

if (t != total)

}return true;

}};

leetcode 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 解釋 下面...

LeetCode 840 矩陣中的幻方(C )

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