找LeetCode上简单的题目来撑过30天啦(DAY4)

明天要出去玩~应该吧/images/emoticon/emoticon07.gif
今天把前几天放弃的Medium题目,捡回来解,一样暴力解解决,那麽,废话不多说,上菜罗

题号:54 标题:Spiral Matrix 难度:Medium

题目内容:
Given an m x n matrix, return all elements of the matrix in spiral order.

Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]


Example 2:

Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]

Constraints:
• m == matrix.length
• n == matrix[i].length
• 1 <= m, n <= 10
• -100 <= matrix[i][j] <= 100


我的程序码

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int  i,j,x,y,count=0;
        List<Integer>  result = new ArrayList<>();
        y = matrix.length;
        x = matrix[0].length;
        //System.out.println(x);
        //System.out.println(y);
        //System.out.println("1" + matrix[i][j]);
        int ax=0,ay=0,bx=x-1,by=1,cx=x-2,cy=y-1,dx=0,dy=y-2;

        while(count != (x*y)){
            for(i=ax,j=ax;j<=bx;j++){
                result.add(matrix[i][j]);
                count++;
            }
            if(count == (x*y)){
                break;
            }
            j=bx;
            ay++;
            ax++;
            
            for(i=by;i<=cy;i++){
                result.add(matrix[i][j]);
                count++;
            }
            if(count == (x*y)){
                break;
            }
            i=cy;
            bx--;
            by++;
            
            for(j=cx;j>=dx;j--){
                result.add(matrix[i][j]);
                count++;
            }
            if(count == (x*y)){
                break;
            }
            j=dx;
            cy--;
            cx--;
            
            for(i=dy;i>=ax;i--){
                result.add(matrix[i][j]); 
                count++;
            }
            if(count == (x*y)){
                break;
            }
            dx++;
            dy--;
        }
        return result;
    }
}

逻辑
就是最直观思考啦,把整个题目拆解成4个步骤,把左上、右上、右下、左下存成A(ax,ay)、B(bx,by)、C(cx,cy)、D(dx,dy)
步骤一(第一个for):固定i=ay,把j从ax到bx存起来,也就是→,然後把A往下一个位子移动。
步骤二(第二个for):固定j=bx,把i从by到cy存起来,也就是↓,然後把B往下一个位子移动。
步骤三(第三个for):固定i=cy,把j从cx到dx存起来,也就是←,然後把C往下一个位子移动。
步骤四(第四个for):固定j=dx,把i从dy到ax存起来,也就是↑,然後把D往下一个位子移动。
重复以上步骤直到存取的数量等於总数(也就是最外圈的while)

DAY4心得
总算解了Medium?但我好像没用到甚麽复杂得计算或是技巧,程度依旧EASY啦,好啦,我要去念别的证照了,大家晚安


<<:  Day05 媒体协商与SDP

>>:  [第四只羊] 迷雾森林建筑工事 III 透过Jumpstarter建立新专案

Day-25 Deadlock

Deadlock tags: IT铁人 介绍 Deadlock是Multi-process常产生的问...

Day17 vue.js 连接资料库显示文章

延续昨日 今天的目标是把首页的文章内容改成get资料库的文章内容 首先先去db.json 设定 我新...

Day3 AR其实在生活中很常见?他们又有那些好处哩(成为史莱姆猎人的萌新)

上期大略介绍了VR,知道VR是藉由装置,让使用者脱离现实,进入到虚拟的空间。这期就来介绍AR啦~~~...

33岁转职者的前端笔记 DAY 28 CSS 选取器类别笔记

CSS 最重要的一环就是选取器,新手一定要了解熟悉 CSS 选取器 才能事办功倍,开发速度也会提升许...

IT 铁人赛 k8s 入门30天 -- day30 Share Process Namespace between Containers in a Pod

参考文件 https://kubernetes.io/docs/tasks/configure-po...