笔试题:js实现螺旋式循环二维数组并输出一维数组

github链接: https://github.com/JiayiChen012/Written-questions.

// 以下两种方式实现螺旋式循环二维数组并输出一维数组
/*** js实现螺旋式循环二维数组并输出一维数组* 方式 1*例: 输入  [[1, 2, 3, 4, 5, 6],[18, 19, 20, 21, 22, 7],[17, 28, 29, 30, 23, 8],[16, 27, 26, 25, 24, 9],[15, 14, 13, 12, 11, 10]]* 输出[1,  2,  3,  4,  5,  6,  7,  8,  9,10, 11, 12, 13, 14, 15, 16, 17, 18,19, 20, 21, 22, 23, 24, 25, 26, 27,28, 29, 30]* @param arr int整型二维数组 要处理的二维数组* @return int整型一维数组*/
function spin1(arr) {// write code herelet carr = [];const l1 = arr.length;for (let i = 0; i < l1; i++) {// 克隆数组carr.push([...arr[i]])}let narr = [];do {narr = narr.concat(...carr[0]); // 添加 上carr.shift(); // 删除 上   即 二维数组每次循环的首项 如 [1,2,3,4,5,6]let j;for (j = 0; j < carr.length; j++) {narr.push(carr[j][carr[j].length - 1]); // 添加 右carr[j].pop(); // 删除 右}if (j === 0) break;carr[j - 1].reverse();narr.push(...carr[j - 1]); // 添加 下carr.pop(); // 删除 下for (let n = carr.length - 1; n >= 0; n--) {narr.push(carr[n][0]); // 添加 左carr[n].shift(); // 删除 左}} while (carr.length !== 0);return narr;
}
/*** js实现螺旋式循环二维数组并输出一维数组* 方式 2* @param arr int整型二维数组 要处理的二维数组* @return int整型一维数组*/
function spin2(arr) {let startX = 0,endX = arr[0].length - 1,startY = 0,endY = arr.length - 1,narr = [];const sum = arr[0].length * arr.length;while (startX <= endX && startY <= endY) {let i;for (i = startX; i <= endX; i++) // 添加 上narr.push(arr[startY][i]);if (narr.length === sum) break;startY++; // 增加行的开始坐标for (i = startY; i <= endY; i++) // 添加 右narr.push(arr[i][endX]);endX--; // 减小列的结束坐标for (i = endX; i >= startX; i--) // 添加 下narr.push(arr[endY][i]);endY--; // 减小行的结束坐标for (i = endY; i >= startY; i--) // 添加左narr.push(arr[i][startX]);startX++; // 增加列的开始坐标}return narr;
}
const arr = [[1, 2, 3, 4, 5, 6],[18, 19, 20, 21, 22, 7],[17, 28, 29, 30, 23, 8],[16, 27, 26, 25, 24, 9],[15, 14, 13, 12, 11, 10]
];
// const arr = [
//     [1, 2, 3, 4, 5, 6, 7],
//     [22, 23, 24, 25, 26, 27, 8],
//     [21, 36, 37, 38, 39, 28, 9],
//     [20, 35, 42, 41, 40, 29, 10],
//     [19, 34, 33, 32, 31, 30, 11],
//     [18, 17, 16, 15, 14, 13, 12]
// ];
// const output = spin1(arr);
const output = spin2(arr);
console.log(output);

笔试题:js实现螺旋式循环二维数组并输出一维数组相关推荐

  1. JS中定义一个二维数组

    JS中定义一个二维数组 方法一 var _TheArray = [["0-1","0-2"],["1-1","1-2"] ...

  2. QRCode.js -- 用 Javascript 生产二维码

    QRCode.js是一个生成二维码的JS库.QRCode.js支持在DOM中使用跨浏览器Canvas和table标签的. QRCode.js不依赖其他JS库. 基本用法: <div id=&qu ...

  3. JS的条形码和二维码生成

    一.前言 最近做项目用到了JS生成条形码和二维码,内容不多,整理一下方便使用. 2018年7月5日更新: 二维码生成时,如果长度太长会有异常: Uncaught Error: code length ...

  4. 网页获取微信信息——js使用插件生成二维码(1)

    js使用插件生成二维码: 一.安装依赖: npm i qrcodejs2 -S 二.放置二维码的容器,需要给一个ref <div class="QRcodeCon">& ...

  5. 使用js,把链接转为二维码

    使用js,把链接转为二维码 Html Js qrcode.min.js Html <!DOCTYPE html> <html><head><meta char ...

  6. js自动实现读取二维码内容

    js自动实现读取二维码内容 <!DOCTYPE html> <html><head><meta charset="utf-8" /> ...

  7. js调用微信利用二维码扫码登录

    js调用微信利用二维码扫码登录 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐 ...

  8. 5.2 Javascript:循环-二维数组

    二维数组说明 与一维数组相比,在用法上二维数组并没有什么不同:二维数组提供了行与 列的选择:也就是说,在一维数组里的每个值都是一组一维数组 语法 var arrayStr=new Array(new ...

  9. TP5循环输出二维数组和遍历一维数组

    *tp5里遍历数组跟tp3.2有些出入,现在直接把方式展现出来 1.遍历二维数组 2.模板输出一维数组

最新文章

  1. ML:MLOps系列讲解之《基于ML的软件的三个层次之02 Model: Machine Learning Pipelines——2.5 Different forms of ML workfl》解读
  2. centos 安装 MatConvNet (gpu)
  3. 多终端数据同步机制设计
  4. Android布局动态化,一种基于堆积木思想的卡片式Android动态布局方法与流程
  5. 前端学习(2193):vuex概念和作用分析
  6. 微服务架构最强讲解,通俗易懂,写得太好了!
  7. nginx指定路径运行
  8. python 运算符优先级、Chaining comparison operators
  9. XmlDataProvider的简单应用
  10. php探针教程,php探针程序的推荐
  11. 如何演示扇形面积公式推导过程
  12. 《新撰组异闻录——铁》启示录
  13. Mac系统配置vue环境出现的权限问题解决方法
  14. 【UE·GamePlay篇】攀爬系统系列教程(二)——相邻墙壁飞跃、墙角拐弯、回头反向跳
  15. 【095期】网易二面:Kafka 为什么吞吐量大、速度快?
  16. 【原创】终结选择困难,Xshell、MobaXterm、PuTTY、SecureCRT 多款 SSH 终端软件该怎么选
  17. 九龙证券|“股神”也做短线?巴菲特减仓逾八成台积电
  18. 数据库从属关系的怎么读取
  19. abp项目怎样发布到服务器,ABP框架学习之—— 设置管理
  20. ansible--Playbook剧本

热门文章

  1. Unity 制造moba英雄联盟战争迷雾1
  2. 未来深圳房价真的会有两倍的上升空间吗?
  3. 弘辽科技:拼多多新店dsr分多久出?如何提高?
  4. 多线程编程定长线程池
  5. Web3.0游戏是否还有未来?
  6. Java题目:百鸡百钱问题
  7. Apowersoft录屏王
  8. 如何搭建一个高效、可靠的积分商城系统?
  9. vue3 (三) 小案例 简易小书架
  10. 如何在PC端应用中运行小程序?