1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 833字,需瀏覽 2分鐘

         ·

        2020-09-27 04:41



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


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


        我們需要從左上角的元素1開始,按照順時針進(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ù)組是空或任何一個維度是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()));
        ????}
        }


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


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




        —————END—————


        掃碼關(guān)注公眾號,訂閱更多精彩內(nèi)容。



        你點(diǎn)的每個贊,我都認(rèn)真當(dāng)成了喜歡
        瀏覽 47
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲综合色婷婷五月 | 真实夫妇交换性经过 | 就要操| 夜夜夜夜曰天天天天拍国产 | 国产午夜成人在线 | 日本操逼的 | 不知火舞乳液狂飙 | 午夜一级黄色片 | 扒开美女狂揉下部在线观看 | 成人网站在线观看不卡 |