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