ARTS 2019 01 12 (13)

68 篇文章 0 订阅
49 篇文章 0 订阅

ARTS
Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Tech:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章;

Algorithm

54. 螺旋矩阵

https://leetcode-cn.com/problems/spiral-matrix/

59. 螺旋矩阵 II

https://leetcode-cn.com/problems/spiral-matrix-ii/

其实这两题整个的 思想是一样的,唯一的技巧就是你需要找到一个正确的方法来记录每次走过的节点,以及找到一个正确的退出循环的方法。
但是两题的走过的路是不一样的,第二题比第一题会简单一些,因为第二题的路线是非常工整的,就是给你一个数字,必然会有一个n*n的矩阵,你只要按照题目意思顺着走就可以了。所以这里先上第二题的代码:

int[][] matrix = new int[n][n];
        if (n == 1) {
            matrix[0][0] = 1;
            return matrix;
        }
        int top = 0;
        int bottom = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length - 1;
        int point = 0;
        while (true) {
            for (int i = left; i < right; i ++) {
                matrix[top][i] = ++point ;
            }
            for (int i = top; i < bottom; i++) {
                matrix[i][right] = ++point;
            }
            for (int i = right; i > left; i--) {
                matrix[bottom][i] = ++point;
            }
            for (int i = bottom; i > top; i--) {
                matrix[i][left] = ++point;
            }

            left++;
            if (left == right) {
                break;
            }

            top++;
            if (top >= bottom) {
                break;
            }

            right--;
            if (right == left) {
                matrix[left][top]= ++point;;
                break;
            }

            bottom--;
            if (bottom == top) {
                break;
            }
        }
        return matrix;

代码中可以看到有四个标点,这这些点在移动的过程中可以帮助我们来确定,下次这些点在什么时候开始逐步进行填数的。大概的路线图的就是如图所示:
在这里插入图片描述
从1到4;5到8;9到12;13到16。一次循环,然后内层17到18;这样以此类推。
利用代码就不难写出来了。
虽然第一题的思路是一样的,但是路线就是不是四平八稳的了,因为需要你需要一次性走到底然后进行更新下一个起点所需要的使用的坐标的节点的数值。相较而言就比较复杂了。最好还是先画一个路线图:
在这里插入图片描述
1到5;6到9;10到13;14到16。这样的路线虽然非主流,但是只要代码写好了,可以很好的应对第一种的复杂的情况,因为第一题会出现比如单个数组排成一列的情况。

Review

一篇对Java之爹的采访:
https://www.artima.com/intv/goslingD.html
原谅我的理解能力,我是真的没怎么看懂这个大爷的说的啥。
不过这个大爷提到Java当时被用到各种的大型操作系统中,这些个大型系统正在变得原来越臃肿,难以操作。
大爷还提到一写关于重构的理念,重构无处不在的,哪怕小到一个变量名称。

Tip/Tech

使用数据结构:队列来实现广度优先搜索

Share

Don’t Touch Anything
在一个复杂的系统中,除非你了解你的改变如何使事情变得更好,否则最好只是保持原样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值