参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构。下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出。蛇形矩阵的什么样这里我就不多说了。

var lineCount=0;
var numCount=1;
var lineLog=1;
var doubleArray=[];
var result="result:";
var lineCountGet;
function index (n) {
ArrayMake(n);
lineCountGet=n;
draw(lineCount);
}
function ArrayMake(log){
if(log>0){
--log;
doubleArray[log]=new Array();
ArrayMake(log)
}
}
function draw(lineNum){
if(lineNum>lineCountGet){
console.log(result);
}else{
for(i=0;i<=lineNum;i++){
console.log(doubleArray);
if(lineLog==1){
doubleArray[lineNum-i][i]=numCount;
result+=doubleArray[lineNum-i][i];
}else{
doubleArray[i][lineNum-i]=numCount;
result+=doubleArray[i][lineNum-i];
}
++numCount;
}
lineLog=-lineLog;
++lineCount;
draw(lineCount);
}
}
index(5);

整理下思路,首先看到蛇形矩阵,第一想法就是做成一个二维矩阵,然后通过遍历输出。这里博主没有输出,只是console了一下

首先看变量定义

var lineCount=0;
var numCount=1;//当前排到的数字
var lineLog=1;//矩阵排列顺序有两种,这里将自左下至右上设为负
var doubleArray=[];//初始化一个数组
var result="result:";
var lineCountGet;//需要输出几列
function index (n) {
ArrayMake(n);
lineCountGet=n;
draw(lineCount);
}

因为数字插入是按照1,2,3,4.....这样的,所以初始化一下,之后通过自加实现递增。linelog的设定是因为我们每个斜行顺序有正向有反向

之后我们遇到第一个问题,js中不可以直接命名多维数组,所以我们只好自己造一个通过function ArrayMake

    function ArrayMake(log){
if(log>0){
--log;
doubleArray[log]=new Array();
ArrayMake(log)
}
}

用一步递归,对array中每个数组再次array化

数组造好了,下面我们要做的就是插数字了

    function draw(lineNum){
if(lineNum>lineCountGet){
console.log(result);
}else{
for(i=0;i<=lineNum;i++){
console.log(doubleArray);
if(lineLog==1){
doubleArray[lineNum-i][i]=numCount;
result+=doubleArray[lineNum-i][i];
}else{
doubleArray[i][lineNum-i]=numCount;
result+=doubleArray[i][lineNum-i];
}
++numCount;
}
lineLog=-lineLog;
++lineCount;
draw(lineCount);
}
}

linenum这边是用来告知当前是第几斜行,因为第几斜行就有几个数,这样便于for循环的书写,再通过linelog辨别斜行顺序的正反区分应该加入数组的样式。ok,搞定!

js实现蛇形矩阵的更多相关文章

  1. 【面试】输出"蛇形"矩阵

    一.题目描述 腾讯实习在线笔试的一道题目. 根据输入的数字(< 1000),输出这样的"蛇形"矩阵,如下.输入n,输出(n * n)阶矩阵,满足由外到内依次增大. 如: 输入 ...

  2. c++实现蛇形矩阵总结

    蛇形矩阵,百度了一下,是这么一个东西: 像一条蛇一样依次递增. 我想,竟然做了螺旋矩阵,那做一下这个吧.在之前的螺旋矩阵的main函数基础上,写个函数接口就行了,这一次做的很快,但是这个矩阵感觉比螺旋 ...

  3. wikioi 1160 蛇形矩阵

    /*======================================================================== 1160 蛇形矩阵 题目描述 Descriptio ...

  4. EOJ3536 求蛇形矩阵每一行的和---找规律

    题目链接: https://acm.ecnu.edu.cn/problem/3536/ 题目大意: 求蛇形矩阵的每一行的和,数据范围n<=200000. 思路: 由于n数据较大,所以感觉应该是需 ...

  5. Java编码 蛇形矩阵的构建与遍历输出

    一.蛇形矩阵的构建,并按行输出 例: 输入:n, 生成n*n的蛇形矩阵 1 2 3 8 9 4 7 6 5 输出:1 2 3 8 9 4 7 6 5 java编码 public static void ...

  6. c++打印蛇形矩阵

    一个m*n的矩阵里按照下图形式填充,最后形成的矩阵即为蛇形矩阵,下图是m=4, n =5时的蛇形矩阵: 方法一:逐层循环 #include <iostream> using namespa ...

  7. EOJ 3.30 B. 蛇形矩阵【找规律/待补】

    [链接]:https://acm.ecnu.edu.cn/contest/59/problem/B/ B. 蛇形矩阵 Time limit per test: 2.0 seconds Memory l ...

  8. ACM_蛇形矩阵

    蛇行矩阵 Time Limit: 4000/2000ms (Java/Others) Problem Description: 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. Input: ...

  9. ACM_三角形蛇形矩阵

    三角形蛇形矩阵 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小铠觉得各类题型是要温故而知新的,所以他叫小发出一道类似做过的题. ...

随机推荐

  1. js获取给定月份的N个月后的日期

    1.在讲js获取给定月份的N个月后的日期之前,小颖先给大家讲下getFullYear().getYear()的区别. ①getYear() var d = new Date() console.log ...

  2. Hbase的伪分布式安装

    Hbase安装模式介绍 单机模式 1> Hbase不使用HDFS,仅使用本地文件系统 2> ZooKeeper与Hbase运行在同一个JVM中 分布式模式– 伪分布式模式1> 所有进 ...

  3. node中子进程同步输出

    管道 通过"child_process"模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fo ...

  4. fir.im Weekly - 关于 iOS10 适配、开发、推送的一切

    "小程序"来了,微信变成名副其实的 Web OS,新一轮的Web App 与Native App争论四起.程序员对新技术永远保持灵敏的嗅觉和旺盛的好奇心,@李锦发整理了微信小程序资 ...

  5. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

  6. canvas快速绘制圆形、三角形、矩形、多边形

    想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...

  7. ES6之let命令详解

    let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...

  8. git init和git init -bare区别

    1 Git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...

  9. 分享一个MySQL分库分表备份脚本(原)

    分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...

  10. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...