参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条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,搞定!

最新文章

  1. php5.6 一键编译
  2. 从头开始 启动开源电商项目jShop
  3. Android知识体系图
  4. [转] Python包和类的基本用法
  5. Android--ColorMatrix改变图片颜色
  6. Yii源码阅读笔记(十)
  7. Linux 查看CPU信息、机器型号等硬件信息
  8. 【转】android 电池(三):android电池系统
  9. 小数点保留n位有效数字
  10. Genymotion下载及安装
  11. Python P图
  12. 关于文件I/o的原子操作
  13. xcode代码提示没了
  14. L312 难看懂的
  15. 面向对象epoll并发
  16. 新装kafka与zookeeper配置
  17. 使用Squid部署代理服务
  18. c#:使用using关键字自动释放资源未必一定就会有明显好处
  19. css-扩展选择器
  20. maven添加本地jar

热门文章

  1. php批量删除
  2. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
  3. CSS入门常见的问题
  4. 利用PowerShell复制SQLServer账户的所有权限
  5. Linux学习
  6. uboot环境配置
  7. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
  8. babel-loader-presets
  9. 字符型图片验证码识别完整过程及Python实现
  10. 【MSP是什么】MSP认证之项目群管理学习心得