<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          漫畫:如何螺旋遍歷二維數(shù)組?

          共 833字,需瀏覽 2分鐘

           ·

          2020-09-25 11:40



          —————? 第二天? —————


          什么意思呢?我們來舉個(gè)例子,給定下面這樣一個(gè)二維數(shù)組:


          我們需要從左上角的元素1開始,按照順時(shí)針進(jìn)行螺旋遍歷,一直遍歷完所有的元素,遍歷的路徑就像下圖一樣:



          經(jīng)過這樣的遍歷,返回的元素結(jié)果如下:


          1,2,3,4,5,10,15,20,19,18,17,16,11,6,7,8,9,14,13,12


          ————————————










          第1層

          從左到右遍歷“上邊”:



          從上到下遍歷“右邊”:



          從右到左遍歷“下邊”:



          從下到上遍歷“左邊”:



          第2層

          從左到右遍歷“上邊”:



          從上到下遍歷“右邊”:



          從右到左遍歷“下邊”:


          從下到上遍歷“左”:


          第3層

          從左到右遍歷“上邊”:



          從上到下遍歷“右邊”:



          從右到左遍歷“下邊”:



          第三層的“左邊”已無需遍歷,二維數(shù)組到此遍歷完畢。




          public?class?SpiralOrder?{

          ????public?static?List?spiralOrder(int[][]?matrix)?{
          ????????List?list?=?new?ArrayList();
          ????????//當(dāng)二維數(shù)組是空或任何一個(gè)維度是0,直接返回
          ????????if?(matrix?==?null?||?matrix.length?==?0?||?matrix[0].length?==?0)?{
          ????????????return?list;
          ????????}
          ????????//m是矩陣的行數(shù)
          ????????int?m?=?matrix.length;
          ????????//n是矩陣的列數(shù)
          ????????int?n?=?matrix[0].length;
          ????????//大循環(huán),從外向內(nèi)逐層遍歷矩陣
          ????????for(int?i=0;?i<(Math.min(m,?n)+1)/2;?i++)?{
          ????????????//從左到右遍歷“上邊”
          ????????????for?(int?j=i;?j????????????????list.add(matrix[i][j]);
          ????????????}
          ????????????//從上到下遍歷“右邊”
          ????????????for?(int?j=i+1;?j????????????????list.add(matrix[j][(n-1)-i]);
          ????????????}
          ????????????//從右到左遍歷“下邊”
          ????????????for?(int?j=i+1;?j????????????????list.add(matrix[(m-1)-i][(n-1)-j]);
          ????????????}
          ????????????//從下到上遍歷“左邊”
          ????????????for?(int?j=i+1;?j1-i;?j++)?{
          ????????????????list.add(matrix[(m-1)-j][i]);
          ????????????}
          ????????}
          ????????return?list;
          ????}

          ????public?static?void?main(String[]?args)?{
          ????????int[][]?matrix?=?{
          ????????????????{?1,??2,??3,??4,??5??},
          ????????????????{?6,??7,??8,??9,??10?},
          ????????????????{?11,?12,?13,?14,?15?},
          ????????????????{?16,?17,?18,?19,?20?}
          ????????};
          ????????int[][]?matrix2?=?{
          ????????????????{?1,??2,??3,??4,??5??},
          ????????????????{?6,??7,??8,??9,??10?},
          ????????????????{?11,?12,?13,?14,?15?},
          ????????????????{?16,?17,?18,?19,?20?},
          ????????????????{?21,?22,?23,?24,?25?}
          ????????};
          ????????List?resultList1?=?spiralOrder(matrix);
          ????????System.out.println(Arrays.toString(resultList1.toArray()));
          ????????List?resultList2?=?spiralOrder(matrix2);
          ????????System.out.println(Arrays.toString(resultList2.toArray()));
          ????}
          }


          在上面的代碼中,一個(gè)大循環(huán)當(dāng)中包含了4個(gè)小循環(huán)。大循環(huán)控制了每一層的遍歷,4個(gè)小循環(huán)分別實(shí)現(xiàn)了同一層上邊、右邊、下邊,左邊的遍歷。


          當(dāng)遍歷到最內(nèi)層時(shí),4個(gè)小循環(huán)并不會(huì)全都執(zhí)行,比如測(cè)試代碼中matrix2的最內(nèi)層只有一個(gè)元素13,那么執(zhí)行完第1個(gè)小循環(huán),就不會(huì)再進(jìn)入后面3個(gè)小循環(huán):




          —————END—————



          推薦閱讀


          1、Chrome 大版本更新來了,這是一次「史詩(shī)級(jí)」增強(qiáng)

          2、你不知道的 TypeScript 泛型(萬字長(zhǎng)文,建議收藏)

          3、尤大 3 天前發(fā)在 GitHub 上的 vue-lit 是啥?

          4、字節(jié)跳動(dòng)的算法面試題是什么難度?



          如果覺得文章不錯(cuò),幫忙點(diǎn)個(gè)在看唄






          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本成人大香蕉视频在线观看 | 天天看夜夜摸 | 午夜网久久久成人 | 亚洲成人网站专区 | 成年人网站在线 |