明天要出去玩~应该吧
今天把前几天放弃的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啦,好啦,我要去念别的证照了,大家晚安
>>: [第四只羊] 迷雾森林建筑工事 III 透过Jumpstarter建立新专案
Deadlock tags: IT铁人 介绍 Deadlock是Multi-process常产生的问...
延续昨日 今天的目标是把首页的文章内容改成get资料库的文章内容 首先先去db.json 设定 我新...
上期大略介绍了VR,知道VR是藉由装置,让使用者脱离现实,进入到虚拟的空间。这期就来介绍AR啦~~~...
CSS 最重要的一环就是选取器,新手一定要了解熟悉 CSS 选取器 才能事办功倍,开发速度也会提升许...
参考文件 https://kubernetes.io/docs/tasks/configure-po...