leetcode 840 矩陣中的幻方

2021-10-05 18:08:12 字數 1370 閱讀 8064

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

可以在**中新增 if grid[r+1][c+1] != 5: continue,幫助我們略過一些迴圈:

class

solution

return ans;

}public

boolean

magic

(int..

. vals)

}

另一種分析

滿足幻方的條件必定是中間的數字為5,周圍的數字為滿足 1->6->7->2->9->4->3->8->1

的這種圓環結構,5的上下左右必定是 1、9、3、7(這四個數字都只能組成兩組 15)

並且5的周圍的數字其實都可以跳過,這裡沒作實現

1.利用陣列的索引語義記錄索引對應的下乙個數字

2.若5的下乙個值滿足條件,且該值的下一行對應列滿足條件,順時針

若5的下乙個值滿足條件,且該值的上一行對應列滿足條件,逆時針

3.總共判斷6次即可(前兩次已經判斷過了)

class

solution

;int result =0;

for(

int i=

1;i1;i++

)else

if(check[next]

== grid[i-1]

[j+1])

}//5的後一位必定不用算

j++;}

}}return result;

}public

boolean

each

(int

grid,

int[

] check,

int x,

int y,

int ward)

for(

int i=x-

2*ward;x!=i;

)for

(int i=y+

2;y!=i;

)return

true;}

}

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解釋 下面的子矩...

leetcode 840 優勢洗牌

思路 很簡單,田忌賽馬。強對強,弱對弱,如果發現你的強打不過對方的強,就用最弱的對對方的強 程式實現問題 1 為了分出強弱,肯定要sort 排序一下,sort c.rbegin c.rend 降序 sort c.begin c.end 公升序 2 排序後索引都變了,怎麼儲存索引,定義 vector ...

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解釋 下面的子矩...