Leetcode - Spiral Matrix II

Paste_Image.png

My code:

public class Solution {
    public int[][] generateMatrix(int n) {
        if (n < 0)
            return null;
        int[][] result = new int[n][n];
        if (n == 0)
            return result;
                int level = n % 2 + n / 2;
        int count = 1;
        for (int i = 0; i < level; i++) {
            for (int j = i; j < i + n - 2 * i; j++)
                result[i][j] = count++;
            if (n - 2 * i == 1)
                return result;
            for (int j = i + 1; j < i + n - 2 * i; j++)
                result[j][i + n - 2 * i - 1] = count++;
            for (int j = i + n - 2 * i - 2; j >= i; j--)
                result[i + n - 2 * i - 1][j] = count++;
            for (int j = i + n - 2 * i - 2; j > i; j--)
                result[j][i] = count++;
        }
        return result;
    }
    
    public static void main (String[] args) {
        Solution test = new Solution();
        int[][] a = test.generateMatrix(4);
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[0].length; j++)
                System.out.print(a[i][j] + " ");
            System.out.println();
        }
        
    }
}

My test result:

這道題目和之前的差不多。剛才因?yàn)橥祽校瑢?xiě)了子函數(shù)沒(méi)改掉,所以運(yùn)行時(shí)間過(guò)長(zhǎng)。
這道題目,就直接寫(xiě)在主函數(shù)的循環(huán)里面了,然后那么多for循環(huán)基本一筆寫(xiě)成,也基本沒(méi)什么問(wèn)題。腦子已經(jīng)特別清楚了。雖然很累。
題目本身沒(méi)有任何難度或者任何思想。。。

**
總結(jié): Array, Math
**

Anyway, Good luck, Richardo!

My code:

public class Solution {
    private int counter = 1;
    public int[][] generateMatrix(int n) {
        int[][] ret = new int[n][n];
        if (n <= 0)
            return ret;
        int scanTimes = (n + 1) / 2;
        int beginRow = 0;
        int beginCol = 0;
        for (int i = 0; i < scanTimes; i++) {
            helper(beginRow + i, beginCol + i, n - i * 2, ret);
        }
        return ret;
    }
    
    private void helper(int beginRow, int beginCol, int len, int[][] matrix) {
        if (len == 1) {
            matrix[beginRow][beginCol] = counter;
            return;
        }
        for (int i = beginCol; i < beginCol + len; i++) {
            matrix[beginRow][i] = counter;
            counter++;
        }
        for (int i = beginRow + 1; i < beginRow + len; i++) {
            matrix[i][beginCol + len - 1] = counter;
            counter++;
        }
        for (int i = beginCol + len - 2; i >= beginCol; i--) {
            matrix[beginRow + len - 1][i] = counter;
            counter++;
        }
        for (int i = beginRow + len - 2; i > beginRow; i--) {
            matrix[i][beginCol] = counter;
            counter++;
        }
    }
}

這題目也沒(méi)什么意思。。。

Anyway, Good luck, Richardo!

My code:

public class Solution {
    public int[][] generateMatrix(int n) {
        if (n < 0) {
            return null;
        }
        
        int[][] matrix = new int[n][n];
        int rowBegin = 0;
        int rowEnd = n - 1;
        int colBegin = 0;
        int colEnd = n - 1;
        int counter = 1;
        while (rowBegin <= rowEnd && colBegin <= colEnd) {
            for (int i = colBegin; i <= colEnd; i++) {
                matrix[rowBegin][i] = counter;
                counter++;
            }
            rowBegin++;
            
            for (int i = rowBegin; i <= rowEnd; i++) {
                matrix[i][colEnd] = counter;
                counter++;
            }
            colEnd--;
            
            if (rowBegin <= rowEnd) {
                for (int i = colEnd; i >= colBegin; i--) {
                    matrix[rowEnd][i] = counter;
                    counter++;
                }
                rowEnd--;
            }
            
            if (colBegin <= colEnd) {
                for (int i = rowEnd; i>= rowBegin; i--) {
                    matrix[i][colBegin] = counter;
                    counter++;
                }
                colBegin++;
            }
        }
        
        return matrix;
    }
}

用之前 Spiral Matrix I 的做法來(lái)做,很快很方便。

Anyway, Good luck, Richardo! --- 08/11/2016

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • My code: My test result: 這道題目我就偷懶了,直接把二維數(shù)組轉(zhuǎn)換為一維數(shù)組,然后二分查找找...
    Richardo92閱讀 355評(píng)論 1 1
  • My code: My test result: 做法比較直接。用多了空間。所以我的做法不需要考慮。網(wǎng)上查到的一種...
    Richardo92閱讀 337評(píng)論 1 1
  • My code: My test result: 這道題目還是和前面的差不多。然后就是要用while循環(huán)把重復(fù)的數(shù)...
    Richardo92閱讀 270評(píng)論 0 1
  • My code: My test result: 這次題目我的代碼運(yùn)行素的比較慢,估計(jì)原因就是因?yàn)槲以O(shè)計(jì)了子函數(shù),...
    Richardo92閱讀 407評(píng)論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,922評(píng)論 0 33

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