螺旋方陣(Leetcode第59題)

2021-08-17 21:05:47 字數 1246 閱讀 2732

問題描述:螺旋矩陣

#include #include int main(){

int n;

scanf("%d",&n);

int i, c = 0, r = 0,num = 0,cnt = n/2;

int a[n][n];

while (cnt--){

for (i = r; i= r - 1; i--) //←

// a[n-r][i] = ++num;//減減方法

思路:最開始我做題的想法不是這樣的,我最開始用的是二維陣列去賦值(兩個for迴圈),因為輸出螺旋矩陣,是個二維的,所以最開始想的就是用兩個for迴圈,以至於思維受限,導致很久都沒有相出解決方法來。就只讓最外面的一層給按順序給排序好了,其他的就不對了。應該的思維是一次一次的排序,而不是兩個for迴圈的排序。具體方法請看**即可理解清楚。首先,因為要進行的螺旋排序不止一圈,所以要在乙個while迴圈中進行,迴圈判斷的條件是方陣階數的二分之一,如果是奇數,那最中心的那個數是需要單獨賦值的,及最大值,如果是偶數直接排序即可。

思考如下幾個問題:①在進行向左和向上時只能用++的方式?,可以怎麼改?

②為什麼我輸出的結果是0開始的?如果改?改的方式?

解決:①不止可以以++的方式,還可以--的方式,在慣性思維裡用的是--的方式,但是這裡用--的方式的話,它的判斷條件就不一樣了,這裡需要仔細考慮。

當減減時就是從最右邊開始往左減減,一直減到第乙個,也就是第0列的位置,判斷停止,向上也是同樣的判斷,但是最後到達的地方的判斷的條件不一致,這裡需要思考一下(因為第0行已經有數了,所以不能取等號),減減的方式也附上了。

②輸出是0開始是因為最開始的初始值為0,有兩個方法可以解決此問題,第乙個也是最簡單的,就是把初始值賦值為1開始,第二個方法是num++變成++num,這個一般很少想得到,這裡又涉及到了另乙個知識點,可以複習一下。

關於++i和i++的區別,可參考以下博主:

例如:左閉右開,如下圖(這點很關鍵,再次強調)

LeetCode筆記 59螺旋矩陣

題目 給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3輸出 1,2,3 8,9,4 7,6,5 思路 直接看了網上大神的 和leetcode上最快的 先把這兩個程式看懂。public class solution else if j n...

leetcode 59 螺旋矩陣

題目要求 按照順時針螺旋順序 構建乙個n n的螺旋矩陣 思路 參照之前的54題輸出螺旋矩陣的思路 將單圈拆開為四個部分。每個部分迴圈的長度是相同的。單圈迴圈完之後,起始座標向右下移乙個單位,單次迴圈長度減二。對於偶數階矩陣,正常結束。對於奇數階矩陣,因為迴圈長度會減到0,需要手動加入最後最中間的乙個...

LeetCode 59 螺旋矩陣II

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 import numpy as np class solution def generatematrix self,n type n int r...