js实现蛇形矩阵-腾讯前端笔试题

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

时间: 2024-10-09 10:07:16

js实现蛇形矩阵-腾讯前端笔试题的相关文章

腾讯前端笔试题整理

1.js中“5”+4=? 答案:“54” 2.js中void(0)=? 答案:undefined 评:这个在a的href 中可以使用javascript:void(0); 如果使用href=”#”,包含了一个位置信息.默认的锚是#top,也就是网页的上端,当连续快速点击此链接时会导致浏览器巨慢甚至崩溃.javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. javascript:;好些,javascript:void(0);据说某些情况下有浏览器兼容bug.(此点

腾讯前端笔试题及答案

简答题 1.js中"5"+4=? 答案:54 2.js中void(0)=? 答案:undefined 3.js中NaN*4=? 答案:NaN 4.js中null*4.5=? 答案:0 5.js中alert(5*015===5.075) 答案:false,结果不一样. 6.js中13>>2=? -13>>2=? 答案:3 ,-4 ,除以4,然后向下取整. 7.js中13|5=? 13&5=? 答案:按位或:13,按位与:5. 8.js中怎么获取当前日期的月

js+html+css实现简单页面交互功能(2015知乎前端笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2 密码:hellozhihu

经典的阿里前端笔试题

1 请说明下面各种情况的执行结果,并注明产生对应结果的理由. function doSomething() { alert(this); } ① element.onclick = doSomething,点击element元素后. ② element.onclick = function() {doSomething()}, 点击element元素后. ③ 直接执行doSomething(). 参考答案: 1.element:调用执行时直接指向事件元素. 2.window:函数调用中的 thi

前端笔试题:拍扁多维数组、提取URL中的参数变成对象、实现string的trim()函数、判断Email地址、16进制颜色转rgb格式

(1)拍扁数组 这是一个著名互联网公司今天的前端笔试题:多维数组维数不定,如[2,4,1,[2,3,4,[1,2],5,3],3,8]拍扁为[2,4,1,2,3,4,1,2,5,3,3,8].维数不定,应该要用递归: 答案: function flatten(arr){ var arrLength=arr.length; for(var i=0;i<arrLength;i++){ if(arr[i].constructor==Array){ arr.splice(i,1,flatten(arr[

前端笔试题汇总整理

一.Js对象 1.如何根据逗号分隔的字符串创建数组呢?请为下面的字符串创建一个数组,并访问第三个元素:"cats,dogs,birds,horses" 知识点:数组和字符串的转换.考察split() 方法.把一个字符串分割成字符串数组(将字符串按某个字符切割成若干个字符串,并以数组形式返回) var animalString="cats,dogs,birds,horses"; var animalArray=animalString.split(",&qu

也许你需要点实用的-Web前端笔试题

之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w3c的理解与认识. 标签闭合,标签小写,不乱嵌套:提高搜索机器人的搜索几率: 使用外联的css和js,结构行为表现的分离:文件下载与页面加载速度更快,内容能被更广泛的设备所访问: 更少的代码和组件:容易维护,改版方便,不需要变动页面内容,提供打印版本而不需要复制内容,提高网站的易用性. 2.Xhtm

&lt;转&gt;网易2016实习生前端笔试题部分总结

网易2016实习生前端笔试题部分总结 原文地址:http://www.cnblogs.com/venoral/p/5325202.html 这只是部分题,答案为个人观点如有错误欢迎指出,感觉考点都挺基础,但是很注重考细节方面,通过整理也知道自己在CSS3和HTML5,网络知识等方面的不足还是得多学多练多思考.攒rp,希望自己在明天360笔试中能轻松答过~ css 1.多选 //HTML <p>很长的一段文字,很长的一段文字,很长的一段文字,特别长的文字</p> //CSS p{ w

阿里2道前端笔试题+堆糖2道前端笔试题

阿里前端笔试题 1.一个表格HTML代码如下 <table id="table1"> <tbody> <tr><td>1</td><td><button>Delete</button></td></tr> <tr><td>2</td><td><button>Delete</button></