JS实现顺时针打印数组
来源:互联网 发布:php aes解密后有乱码 编辑:程序博客网 时间:2024/05/21 12:47
序
今天中午吃饭的时候,遇到了一位同学,平时关系还算不错,最近他在准备面试,有一道面试题提了出来,就是关于5*5矩阵顺时针打印的问题。他是学习C语言和c++语言的,而我主要学习JavaScript。但是这有什么关系。这道题主要考察的是算法和判断边界问题。不论什么语言都可以实现的。每一门语言都有其独特的解决问题的场景,比如我学的JavaScript,在浏览器这块没有其他语言比它更加合适了。学习语言到最后,基本上核心就是算法和数据结构。新的问题产生,如何用简单高效的方法用语言解决,这是需要不断学习的。
过程
在吃饭的时候想了想。第一个想法就是用数组表示矩阵,然后遍历数组,重新组成一个新的字符串,就得到我们想要的结果了。这个思路很简单,就是不断遍历,将外围的一圈遍历完后,继续里面的一圈。而且需要判断边界问题。这也是自己在最后才明白这道面试题的考察点。吃饭结束后,回来在电脑上试了试,最开始就卡在二维数组的问题上,JavaScript中是动态数组,与之前学习的C语言数组还是有点区别的。于是取巧,再函数内声明一个数组,不需要再次输入。原本面试题还需要输入数组,然后再得出结果的。这个就不是重点了,重要的是如何将数组顺时针打印出来。
反正就是慢慢试,将一个3*3数组慢慢打印出来,用了四个for循环。没有考虑边界检查,也没有函数的概念,结果是出来了,虽然是3*3数组,但是距离5*5还远吗?
确实,需要承认的是,还有好远的额!我那个代码我都不想再看了,实在有点糟糕。没有边界检查,很容易出现错误,而且如果变成4*4或者其他的,就又要写一堆的废代码。接下来认真想了想,于是将处理过程放在一个函数中,并用递归的思想将其实现。程序立马不一样了,提高了可用性。
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>顺时针打印数组</title></head><body> <script type="text/javascript"> window.onload = function() { var columns=4,rows=4,start=0;//行 列 起始位置 var array=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];//定义二维数组 var result=new Array(); printArray(array,columns,rows,start); document.write(result.split(",")) function printArray(array,columns,rows,start){ if(columns < 1 || rows < 1 || start < 0 ) return; if( columns <= 2*start || rows <= 2*start ) return; var stopX = columns - 1 - start;//一圈最右列在坐标中的位置 var stopY = rows - 1 - start;//一圈最大行在坐标中位置 //打印此圈中的最上行 for(var i=start; i<=stopX; i++) result+=array[start][i]+","; //打印此圈中的最右列 if(start < stopX) //如果此圈中不止有一列 for(var i=start+1; i<=stopY; i++) result+=array[i][stopX]+","; //打印次圈中的最下行 if(start < stopX && start < stopY) for(var i=stopX-1; i >= start; i--) result+=array[stopY][i]+","; //打印次圈中的最左行 if(start < stopX && start < stopY - 1) for(var i=stopY-1; i >= start+1; i--) result+=array[i][start]+","; printArray(array,columns,rows,start+1);//下一圈循环 } } </script></body></html>
结果
测试结果没有问题,当然这个问题还有不用递归的解法,暂时就写在这里,欢迎各位大神指点代码不足之处,共同进步。
- JS实现顺时针打印数组
- 剑指offer----顺时针打印数组----java实现
- 顺时针/螺旋打印数组
- 顺时针打印数组
- 顺时针打印数组
- 二维数组顺时针打印
- 顺时针打印数组
- 顺时针打印数组
- 顺时针打印二维数组
- 顺时针打印数组
- 顺时针数组循环打印
- 顺时针打印java实现
- 剑指offer:顺时针打印数组
- 剑指Offer-顺时针打印数组
- 顺时针螺旋打印二维数组
- 顺时针打印矩阵(数组)
- 顺时针打印矩阵java实现
- 顺时针打印矩阵或者 螺旋数组
- 第9章(1) 接口和抽象类
- Spring注解在Junit中的使用问题
- Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
- 【Unity优化】构建一个拒绝GC的Lis
- vim grep配置及使用
- JS实现顺时针打印数组
- 2017/3/18 CSP题库的一道不算很难的题 因为自己没认真看题被坑惨..
- 使用Vim
- Incorrect string value: '\\xE7\\x9B\\xB8\\xE5\\x90\\x8C...' for column 'comment' at row 1
- 使用Eclipse创建包
- 01 了解activity
- Vim winmanager文件浏览自动更新
- 单例模式(2-设计模式)
- C++ main函数中参数argc和argv含义及用法