五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

力扣螺旋矩陣題解

2023-08-24 19:02 作者:霧中郵寄  | 我要投稿

題目

給定一個正整數(shù) n,生成一個包含 1 到 n^2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

示例:

輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

鏈接

力扣

關(guān)鍵點(diǎn)

  1. 四角邊界的處理

  2. 條件的處理使當(dāng)前結(jié)點(diǎn)處理還是下一節(jié)點(diǎn)處理

遵頊循環(huán)不變量原則

不變量即邊界條件不變

左閉右開

一條線上有連個結(jié)點(diǎn),該原則的處理方式為,處理第一個結(jié)點(diǎn)及邊,第二個結(jié)點(diǎn)在處理第二條邊時處理

實(shí)現(xiàn)的細(xì)節(jié)

  1. n為偶數(shù)。生成n*n維螺旋矩陣,需要旋轉(zhuǎn)n/2圈(觀察和推理所得)

  2. n為奇數(shù)。(n-1)/2圈,剩余一個元素直接放入螺旋中心,也可以視為(n+1)/2圈

  3. 每一圈的起始位置。不固定,定義起始坐標(biāo)點(diǎn)(start x,start y),每一圈的起始位置都不一樣

  4. 第三個結(jié)點(diǎn)(右下角),該點(diǎn)的列坐標(biāo)無需賦初值,處理第二個點(diǎn)的列坐標(biāo)可以直接用于第三個結(jié)點(diǎn)的處理

實(shí)現(xiàn)流程

  1. 定義起始點(diǎn)的坐標(biāo)位置(startx,starty),遍歷元素使用坐標(biāo)(i,j)表示,圈數(shù)loop,更新縮圈后的邊界offset

  2. while循環(huán)(條件是:圈數(shù)--)以圈為最小單位控制,四個for循環(huán)(條件是:j = starty; j < n - offset; j++)控制每條邊上的元素

  3. 若n為奇數(shù),n^2直接給矩陣中心賦值

流程分析

  1. 每一圈的開始的坐標(biāo)由start控制,i,j只負(fù)責(zé)處理邊

  2. 第二圈相比第一圈,第三圈相比第二圈,起始位置發(fā)生了變化,各個角的坐標(biāo)也發(fā)生了變化,因此引入變量loop,offset分別控制圈數(shù),每條邊處理的邊界坐標(biāo)

C++

Java

Java實(shí)現(xiàn)分析(與C++不同之處)

受語法限制,實(shí)現(xiàn)的思路有所不同

  1. loop初值為0

  2. 使用loop替代offset,引用一個變量控制兩種行為

  3. 后兩個for循環(huán)條件含由=,是因?yàn)镃++是與start(while循環(huán)中初值為0)比較,Java中的for(;i>=loop;i--)(while循環(huán)中l(wèi)oop初值為1),所以判斷條件為≥而非>


力扣螺旋矩陣題解的評論 (共 條)

分享到微博請遵守國家法律
德昌县| 昌都县| 尉犁县| 镇原县| 拜泉县| 吉木乃县| 金平| 红安县| 富平县| 肇源县| 囊谦县| 健康| 无极县| 泸定县| 嵊州市| 灌阳县| 安西县| 邯郸县| 图们市| 临漳县| 镇坪县| 十堰市| 冷水江市| 金沙县| 高青县| 洛隆县| 西畴县| 长寿区| 双柏县| 秭归县| 古蔺县| 曲阳县| 库伦旗| 湖州市| 得荣县| 大埔区| 兖州市| 宝山区| 新营市| 克山县| 鸡泽县|