JS从0到1——756. 蛇形矩阵
JS 矩阵 蛇形
2023-09-14 09:14:57 时间
Question
输入两个整数 n
和 m
,输出一个 n
行 m
列的矩阵,将数字 1
到 n×m
按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 n
和 m
。
输出格式
输出满足要求的矩阵。
矩阵占 n
行,每行包含 m
个空格隔开的整数。
数据范围
1≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
Ideas
- 利用偏移量解决
Code
let buf = "";
process.stdin.on("readable", function() {
let chunk = process.stdin.read();
if (chunk) buf += chunk.toString();
});
process.stdin.on("end", function() {
// 使用偏移量解决,有点像BFS里面的扩展队首
let [n, m] = buf.split(' ').map((x)=>{return parseInt(x)});
// 全部初始化为0
let res = [];
for (let i = 0; i < n; i ++){
res[i] = [];
for (let j = 0; j < m; j ++){
res[i].push(0);
}
}
let dx = [-1,0,1,0], dy = [0,1,0,-1];
// (x,y)当前的坐标,d移动的方向,一开始向右走
let x = 0, y = 0, d = 1;
for (let i = 1; i <= n * m; i ++){
res[x][y] = i;
let a = x + dx[d], b = y + dy[d];
// 走到头,需要转向
if (a < 0 || a >= n || b < 0 || b >= m || res[a][b]){
d = (d + 1) % 4; // 改变方向
a = x + dx[d], b = y + dy[d];
}
x = a, y = b;
}
for (let i = 0; i < n; i ++){
line = "";
for (let j = 0; j < m; j ++){
line += res[i][j] + ' ';
}
console.log(line);
}
});
相关文章
- js书写原生ajax,JS 原生ajax写法
- php 中js跳转页面跳转页面,js跳转代码_PHP页面跳转 Js页面跳转代码[通俗易懂]
- 用JS获取地址栏url参数的方法_js的url是啥
- js的DOM理解
- JS面试题-js新增基本数据类型BigInt
- js中四舍五入的方法_JS取整
- 【JS 逆向百例】猿人学系列 web 比赛第五题:js 混淆 - 乱码增强,详细剖析
- js实现一键复制
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑(html2md.js 或 html2markdown.js)
- 建立一个node.js服务器(使用express搭建第一个Web环境)详解编程语言
- JS运算符 ==和===详解编程语言
- JS classList属性的使用
- 快速掌握JS操作MySQL数据库技巧(js操作mysql数据库)
- 使用JS实现Redis数据读取(js读取redis)
- 使用 JS 操作 Redis:实现强大数据存储.(js调用redis)
- 使用JS在网页中连接Oracle数据库(js网页链接oracle)
- Redis中的订阅机制及其在JS中的应用(redis 订阅 js)
- js实现无缝滚动兼容IE和FF
- CSS和JS标签style属性对照表(方便js开发的朋友)
- 基于node.js的快速开发透明代理
- js字符串转成JSON
- JS正则验证邮箱的格式详细介绍
- JS获取单击按钮单元格所在行的信息
- JS打开新窗口防止被浏览器阻止的方法
- js控制再次点击按钮之间的间隔时间可防止重复提交
- JS排序输出实现table行号自增前端动态生成的tr