本文主要是介绍利用JavaScript实现蛇形矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
利用JavaScript实现蛇形矩阵
输入:5
输出:[ [1, 2, 3, 4, 5],
[16,17,18,19,6],
[15,24,25,20,7],
[14,23,22,21,8],
[13,12,11,10,9] ]
之前面试遇到这道题了,当时没有编出来,然后一直没时间尝试,今天终于抽空补上了,欠的债终于还了(小声BB)
言归正传,如给定示例,数字按照顺时针旋转填充,故可以观察出该矩阵通过旋转n圈填满整个二维矩阵。
所以我们想要填满一个num*num的二维矩阵,需要计算出旋转多少圈,然后推算出每一圈上二维数组的索引规律与元素值变化规律。代码如下:
function snakeMatrix(num) {var row = num,col = row;var q = Math.ceil(num / 2); // 旋转几圈// 创建存放的数组var result = new Array(row);for(var i=0;i<row;i++){result[i] = new Array(col);}var n = 0; // 第n+1圈var begin = 1; // 每一圈起始值// 第n+1圈top,right,bottom,left值// 难点在于找到每一边上二维数组的索引变化规律// top的索引值 result[n][n+i]// bottom索引值 result[row-1-n][col-1-n-i]// right、left类似// right索引 result[n+i][col-1-n]// left索引 result[row-1-n-i][n]while(n <= q){var top = col - 2 * n; for (var i = 0; i < top; i++) {result[n][i+n] = begin + i;}var right = row - 2 * n;for (var i = 0; i < right; i++) {result[i+n][col-n-1] = begin + top + i -1;}var bottom = col - 2 * n;for (var i = 0; i < bottom; i++) {result[row-n-1][col-n-i-1] = begin + top + right + i - 2;}var left = row - 2 * n - 1;for (var i = 0; i < left; i++) {result[row-i-n-1][n] = begin + top + right + bottom + i - 3;}begin += top + right + bottom + left - 3;n++;}return result;
}
console.log(snakeMatrix(5));
// [ [ 1, 2, 3, 4, 5 ],
// [ 16, 17, 18, 19, 6 ],
// [ 15, 24, 25, 20, 7 ],
// [ 14, 23, 22, 21, 8 ],
// [ 13, 12, 11, 10, 9 ] ]
蛇形矩阵变形
输入:[ [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],
[10,15,19,25,24],
[23,22,21,16,11],
[6, 7, 8, 9, 14],
[19,18,17,12,13]]
function printMatrix(matrix)
{var row = matrix.length;var col = matrix[0].length;var q = Math.ceil(row / 2);var left = 0;var top = 0;var right = col - 1;var bottom = row - 1;var result = [];while(top <= bottom && left <= right){// topfor(var i=left;i<=right;i++){result.push(matrix[top][i]);}// rightfor(var i=top+1;i<=bottom;i++){result.push(matrix[i][right]);}// bottomif(top != bottom){for(var i=right-1;i>=left;i--){result.push(matrix[bottom][i]);}}// leftif(left != right){for(var i=bottom-1;i>top;i--){result.push(matrix[i][left]);}}top++;right--;bottom--;left++;}return result;
}
var arr2 = [[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]];
console.log(printMatrix(arr2)); // [1,2,3,4,5,10,15,19,25,24,23,22,21,16,11,6,7,8,9,14,19,18,17,12,13]
这篇关于利用JavaScript实现蛇形矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!