Leetcode: Spiral Matrix

这道题跟之前的rotate Image 非常的相似,以致于我很机械化的开始做了半天才意识到我到底在写什么。。。

第一步基本上没什么疑问,肯定会写出来上下左右的值。

Leetcode: Spiral Matrix_第1张图片


之后的逻辑就至关重要了。我们环绕matrix的走法是先右,下,左, 上。 但是在这个过程中,每次绕完一圈,都要调整一下下一次出发的起点和 平行,垂直的终点。这个真的是要根据题感,想到说能够控制平行的起点,终点肯定是由int top, left, right, bot 这几个东西来控制的。 

有了这么一个大概的逻辑,就可以开始写题了。

while(top <= bot && left <= right)    这个条件check也是很tricky,要想想edge case 3 by 3, 中间那一行怎么办?还得access对吧,所以得有一个等于的case

     接下来思考第一行的往右平行移动怎么做?  第一感觉是不是  while(left < right)... left++?

看起来好像是对的,但是这么做的话就会无形中把left,这个作为下一轮左侧的起点直接移动到最右边去了。【发现这个点至关重要, 但是这一步是由于我第一次做忘了这个 做一半才发现。 我估摸着如果第一次做,应该每一步多审视几秒的话应该是可以发现这个问题】。 

所以这个时候就应该想怎么样移动而不会影响起点left。 答案是int i=left, 然后i++.

对于traverse from right to left和from bot to top还需要两个条件check。不过这个条件check感觉吧。。。应该事先很难想到 

你可能感兴趣的:(Leetcode: Spiral Matrix)