微软的一道前端面试题

2,212 阅读4分钟

二维数组最外围顺时针排序输出

         首先讲解一下题目

         一个二维数组最外层顺时针排序输出

         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

         输出结果要是1,2,3,4,5,14,15,20,25,24,23,22,21,16,11,6的顺序中间的数字则不要

         思路是首先输出第一行1,2,3,4,5这个顺序不会变所以找到二维数组中的第一行数组直接输出就行

         之后思路是输出中间几个数组的最后一个值10,15,20

         第三步输出最后一行数组倒序的值25,24,23,22,21

         最后一步将中间部分的数组倒序输出第一个值16,11,6

         这样就完成了所有数组的输出,下面是代码讲解

         一个二维数组


//    建立一个二维数组
        var arry=[[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]];

         选中第一个数组


//取到数组的第一个数组
        var fistarry=arry[0];

         新建一个数组然后循环插入到这个数组里


   //创建新数组用于储存
        var newarry=new Array();
        for(var i=0; i< fistarry.length;i++){
   //插入新数组第一个数组
            newarry.push(fistarry[i])
        }

         创建一个新数组来存储中间的数组,之后循环这几个中间的数组取到最后一个值,主意这个取到的中间的数组很重要一会也会用到


  //创建新数组用于储存中间的数组
        var centerArray=new Array();
        for (var a=1;a < arry.length-1;a++){
            //插入中间的数组
            centerArray.push(arry[a]);
        }
        //循环中间的这几个数组
        for(var v=0;v < centerArray.length;v++){
            //定义这几个数组
            var centerlastarry=centerArray[v];
            // 取到的这几个数组只选出最后一个即可
            newarry.push(centerlastarry[centerlastarry.length-1])
        }

         第三步是找到最后一个数组之后对它进行反转操作


  //取到最后一个数组
        var lastarray=arry[arry.length-1];
        //使用reverse对最后一个数组进行反转
        var fanlastarray=lastarray.reverse();
        //循环反转的最后一个数组
        for(var s=0;s < fanlastarray.length;s++){
            //将最后一个数组插入新的数组中
            newarry.push(fanlastarray[s]);
        }

         最后一步是把刚刚的中间的数组反转顺序然后取到第一个数字


 //刚刚的中间的数组不知道大家是否还记得现在使用reverse对这个数组进行反转
        var fancenterarray=centerArray.reverse();
        //循环取出这几个数组中的第一个数字
        for(var f=0;f < fancenterarray.length;f++){
            //定义每个数组
            var fistmumber=fancenterarray[f];
            //每个数组的第一个插入新数组
            newarry.push(fistmumber[0]);
        }

         将值打印出来


//打印结果1,2,3,4,5,14,15,20,25,24,23,22,21,16,11,6
       console.log(newarry);

         将值打印出来贴出来源码进行分享


     var arry=[[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]];
        //取到数组的第一个数组
        var fistarry=arry[0];
        //创建新数组用于储存
        var newarry=new Array();
        for(var i=0;i < fistarry.length;i++){
            //插入新数组第一个数组
            newarry.push(fistarry[i])
        }
        //创建新数组用于储存中间的数组
        var centerArray=new Array();
        for (var a=1;a < arry.length-1;a++){
            //插入中间的数组
            centerArray.push(arry[a]);
        }
        //循环中间的这几个数组
        for(var v=0;v < centerArray.length;v++){
            //定义这几个数组
            var centerlastarry=centerArray[v];
            // 取到的这几个数组只选出最后一个即可
            newarry.push(centerlastarry[centerlastarry.length-1])
        }
        //取到最后一个数组
        var lastarray=arry[arry.length-1];
        //使用reverse对最后一个数组进行反转
        var fanlastarray=lastarray.reverse();
        //循环反转的最后一个数组
        for(var s=0;s < fanlastarray.length;s++){
            //将最后一个数组插入新的数组中
            newarry.push(fanlastarray[s]);
        }
        //刚刚的中间的数组不知道大家是否还记得现在使用reverse对这个数组进行反转
        var fancenterarray=centerArray.reverse();
        //循环取出这几个数组中的第一个数字
        for(var f=0;f < fancenterarray.length;f++){
            //定义每个数组
            var fistmumber=fancenterarray[f];
            //每个数组的第一个插入新数组
            newarry.push(fistmumber[0]);
        }
        //打印结果
       console.log(newarry);

         最后想说的这个方法可能不是唯一的解决方案,现在我也只能想到这个方案,如果大家有更好的解决方案不妨告诉我,我再进行修正,今天的文章就到这谢谢阅读。