算法 - 蛇形矩阵输出
2017-04-23 15:27
656 查看
思路:
1. 创建n*n的二维数组。
2. 定义四个填充的方法,分别是→、↓、←、↑。
3. 当需要填充时,确定方向,然后从外向内遍历找到空缺的位置进行填充。
1. 创建n*n的二维数组。
2. 定义四个填充的方法,分别是→、↓、←、↑。
3. 当需要填充时,确定方向,然后从外向内遍历找到空缺的位置进行填充。
var print = function (n) { var lineArr = []; var j, k; for (j = 0; j < n; j++) { lineArr[j] = new Array(); for (k = 0; k < n; k++) { lineArr[j][k] = undefined; } } var type = 1, typeCount = 4; var func = getFunc(type); for (var i = 1; i <= n * n; i++) { i = func(lineArr, n, i) type++; if (type > typeCount) type = 1; func = getFunc(type); } j = k = 0; for (; j < n; j++) { console.log(lineArr[j].join(' ')); } }; var getFunc = function (type) { switch (type) { case 1: return func1; case 2: return func2; case 3: return func3; case 4: return func4; } } //→ var func1 = function (lineArr, n, intNum) { var isBreakOutterFor = false; for (var i = 0; i <= Math.ceil(n / 2); i++) {//行 for (var j = 0; j < n; j++) {//列 if (typeof lineArr[i][j] == 'undefined') { lineArr[i][j] = intNum++; isBreakOutterFor = true; } } if (isBreakOutterFor) return intNum - 1; } return intNum; } //↓ var func2 = function (lineArr, n, intNum) { var isBreakOutterFor = false; for (var i = n - 1; i >= Math.floor(n / 2); i--) {//列 for (var j = 0; j < n; j++) {//行 if (typeof lineArr[j][i] == 'undefined') { lineArr[j][i] = intNum++; isBreakOutterFor = true; } } if (isBreakOutterFor) return intNum - 1; } return intNum; } //← var func3 = function (lineArr, n, intNum) { var isBreakOutterFor = false; for (var i = n - 1; i >= Math.floor(n / 2); i--) {//行 for (var j = n - 1; j >= 0; j--) {//列 if (typeof lineArr[i][j] == 'undefined') { lineArr[i][j] = intNum++; isBreakOutterFor = true; } } if (isBreakOutterFor) return intNum - 1; } return intNum; } //↑ var func4 = function (lineArr, n, intNum) { var isBreakOutterFor = false; for (var i = 0; i < Math.floor(n / 2); i++) {//列 for (var j = n - 1; j >= 0; j--) {//行 if (typeof lineArr[j][i] == 'undefined') { lineArr[j][i] = intNum++; isBreakOutterFor = true; } } if (isBreakOutterFor) return intNum - 1; } return intNum; } print(6);
相关文章推荐
- 蛇形矩阵 面试算法(1)
- 蛇形数组输出的算法--ACM题目
- [算法]方正面试题:N×N矩阵螺旋打印输出
- 简单算法 简单矩阵输出
- 方欣科技算法题面试:蛇形矩阵
- 输出10*10蛇形排列矩阵
- java蛇形矩阵输出方法(顺时针、逆时针)
- 以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法
- 【面试】输出"蛇形"矩阵
- 二维数组蛇形和Z形矩阵输出
- 算法题:蛇形打印矩阵
- 矩阵蛇形填数和顺时针输出
- 【算法】 输入n 输出一个n*n的zigzag矩阵 利用c++实现
- 算法题1:蛇形打印矩阵
- JAVA代码—算法基础:将N*N的矩阵顺时针旋转90度输出元素
- 方欣科技算法面试:蛇形矩阵2
- 利用MPICH2计算矩阵相乘的简单算法
- 连续多输出感知器训练算法的实现
- 3.3.3.3稀疏矩阵转置算法
- MPI群通信与矩阵乘法的Fox算法实现