《劍指offer》— JavaScript(19)順時(shí)針打印矩陣

順時(shí)針打印矩陣

題目描述

輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.


思路

  1. 選坐標(biāo)為(0,0),(1,1)...的點(diǎn)記為(start,start),作為開始坐標(biāo),下一圈開始坐標(biāo)為(start+1,start+1);
  2. 判斷是否進(jìn)入下一圈(即是否打印完成)的條件是rows>start*2 && cols>start*2;
  3. 打印一圈的左上角坐標(biāo)為(start,start),右下角的坐標(biāo)為(cols-start-1,rows-start-1)
  4. 根據(jù)一圈左上角和右下角坐標(biāo)判斷“從左到右”,“從上到下”,“從右到左”,“從下到上”需要打印的點(diǎn)。

實(shí)現(xiàn)代碼

function printMatrix(matrix) {
    if (matrix == null || matrix.length == 0) {
        return;
    }
    var rows = matrix.length;
    var cols = matrix[0].length;
    var start = 0;
    var result = [];

    while (cols > start * 2 && rows > start * 2) {
        var endX = cols - 1 - start;
        var endY = rows - 1 - start;
        //從左到右打印一行
        for (var i = start; i <= endX; i++) {
            result.push(matrix[start][i]);
        }
        //從上到下打印一行
        if (start < endY) {
            for (var i = start + 1; i <= endY; i++) {
                result.push(matrix[i][endX]);
            }
        }
        //從右到左打印一行
        if (start < endX && start < endY) {
            for (var i = endX - 1; i >= start; i--) {
                result.push(matrix[endY][i]);
            }
        }
        //從下到上打印一行
        if (start < endX && start < endY - 1) {
            for (var i = endY - 1; i >= start + 1; i--) {
                result.push(matrix[i][start]);
            }
        }
        start++;
    }
    return result
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目 輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下矩陣: 1 2 3 4 5 ...
    wuzhiguo閱讀 1,330評(píng)論 0 0
  • 本文章轉(zhuǎn)載于搜狗測(cè)試 1、.junit需要注意什么?什么時(shí)候用before什么時(shí)候用beforeClass Bef...
    夜境閱讀 307評(píng)論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • 我對(duì)時(shí)事政治、網(wǎng)絡(luò)熱點(diǎn)反應(yīng)有點(diǎn)遲鈍,直到微信被刷屏了,我才知道北京八達(dá)嶺野生動(dòng)物園老虎傷人事件。 任何生命的離去都...
    smile石邁閱讀 473評(píng)論 0 3
  • 不是每個(gè)所以都要有因?yàn)?,所以他什么都不是?#你的死心塌地,他的無關(guān)痛癢# 1.不知從什么時(shí)候開始,你知道你喜歡上...
    張家悶少閱讀 227評(píng)論 4 0

友情鏈接更多精彩內(nèi)容