885-螺旋矩阵 - III
885-螺旋矩阵 - III
在 R 行 C 列的矩阵上,我们从 (r0, c0) 面朝东面开始
这里,网格的西北角位于第一行第一列,网格的东南角位于最后一行最后一列。
现在,我们以顺时针按螺旋状行走,访问此网格中的每个位置。
每当我们移动到网格的边界之外时,我们会继续在网格之外行走(但稍后可能会返回到网格边界)。
最终,我们到过网格的所有 R * C 个空间。
按照访问顺序返回表示网格位置的坐标列表。
示例 1:
输入:R = 1, C = 4, r0 = 0, c0 = 0
输出:[[0,0],[0,1],[0,2],[0,3]]
示例 2:
输入:R = 5, C = 6, r0 = 1, c0 = 4
输出:[[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]
提示:
- 1 <= R <= 100
- 1 <= C <= 100
- 0 <= r0 < R
- 0 <= c0 < C
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public int[][] spiralMatrixIII(int R, int C, int r0, int c0) {
int[][] res = new int[R * C][2];
int num = 0;
int cnt = 1;
boolean[][] visited = new boolean[R][C];
while (num < R * C) {
for(int j = c0 - cnt + 1; j <= c0 + cnt; j++) {
if(r0 + 1 - cnt >= 0 && r0 + 1 - cnt < R && j >= 0 && j < C
&& !visited[r0 + 1 - cnt][j]) {
res[num++] = new int[]{r0 - cnt + 1, j};
visited[r0 + 1 - cnt][j] = true;
}
}
for(int i = r0 - cnt + 1; i <= r0 + cnt; i++) {
if(i >= 0 && i < R && c0 + cnt >= 0 && c0 + cnt < C
&& !visited[i][c0 + cnt]) {
res[num++] = new int[]{i, c0 + cnt};
visited[i][c0 + cnt] = true;
}
}
for (int j = c0 + cnt; j >= c0 - cnt; j--) {
if(r0 + cnt >= 0 && r0 + cnt < R && j >= 0 && j < C
&& !visited[r0 + cnt][j]) {
res[num++] = new int[]{r0 + cnt, j};
visited[r0 + cnt][j] = true;
}
}
for (int i = r0 + cnt; i >= r0 - cnt; i--) {
if(i >= 0 && i < R && c0 - cnt >= 0 && c0 - cnt < C
&& !visited[i][c0 - cnt]) {
res[num++] = new int[]{i, c0 - cnt};
visited[i][c0 - cnt] = true;
}
}
cnt++;
}
return res;
}
官方题解:
class Solution {
public int[][] spiralMatrixIII(int R, int C, int r0, int c0) {
int[] dr = new int[]{0, 1, 0, -1};
int[] dc = new int[]{1, 0, -1, 0};
int[][] ans = new int[R*C][2];
int t = 0;
ans[t++] = new int[]{r0, c0};
if (R * C == 1) return ans;
for (int k = 1; k < 2*(R+C); k += 2)
for (int i = 0; i < 4; ++i) { // i: direction index
int dk = k + (i / 2); // number of steps in this direction
for (int j = 0; j < dk; ++j) { // for each step in this direction...
// step in the i-th direction
r0 += dr[i];
c0 += dc[i];
if (0 <= r0 && r0 < R && 0 <= c0 && c0 < C) {
ans[t++] = new int[]{r0, c0};
if (t == R * C) return ans;
}
}
}
throw null;
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/spiral-matrix-iii/solution/luo-xuan-ju-zhen-iii-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
885-螺旋矩阵 - III的更多相关文章
- [Swift]LeetCode885. 螺旋矩阵 III | Spiral Matrix III
On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?
Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 ...
- Java-基础编程(螺旋矩阵&乘法表)
package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.ut ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- PAT-乙级-1050. 螺旋矩阵(25)
1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...
- NOIP2014-普及组复赛-第三题-螺旋矩阵
题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...
- LeetCode 59. Spiral Matrix II (螺旋矩阵之二)
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
- LeetCode 54. Spiral Matrix(螺旋矩阵)
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
随机推荐
- drf认证组件、权限组件、jwt认证、签发、jwt框架使用
目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...
- JS循环解决任意日期间的间隔天数
用JS循环解决任意日期间的间隔天数,并求截止日期是周几 y1=1900 m1=1 d1=1 y2=2000 m2=5 d2=3 days=0 ydays=0 mdays=0 ddays=d2-d1 f ...
- 曹工说Spring Boot源码(20)-- 码网灰灰,疏而不漏,如何记录Spring RedisTemplate每次操作日志
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada
匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...
- 斯坦福大学cs231n作业参考(中文版)
cs231n2016冬季课程作业完成,在原先的基础上进行了翻译和中文注释,同时增加了16之后版本的部分新作业文件,已经全部跑通,需要的欢迎自取. 斯坦福大学的 CS231n(全称:面向视觉识别的卷积神 ...
- 网页延迟加载动画的实现-WOW.js
网页内容一开始不显示,随着鼠标下拉延迟显示,还有时间差 一开始觉得好难好复杂好高大上,直到我发现 wow.js …… 首先是演示地址:https://www.delac.io/wow/ 嗯,狗子确实很 ...
- MySQL导出数据时提示文件损坏
使用Navicat工具,优先将整个数据库的表和数据导出. 如果遇到文件损坏错误可以在表实例界面选中所有表,然后将表转储为SQL文件(结构和数据). 在目标数据库执行导出的SQL文件,导入结构和数据. ...
- Docker总结2020
1. docker ps docker exec -it php7 /bin/bash 设置文件权限: chmod -R sign_tp5/ 重启nginx命令: nginx -s reload ...
- 使用PropTypes进行类型检查
原文地址 1.组件特殊属性——propTypes 对Component设置propTypes属性,可以为Component的props属性进行类型检查. import PropTypes from ' ...
- MySQL数据库root密码忘记丢失重置方法
对于DBA来说,丢失超管用户root的密码是致命的, 可以通过添加--ship-grant-tables参数来跳过权限表. 1.忘记root密码,进不去数据库: 这个时候需要强制停库,先查看MySQL ...