javascript: 顺时针打印出1到一个数的平方矩阵

顺时针打印出1到一个数的平方矩阵,假如数为3,则3的平方为9,要打印的矩阵为:

1 2 3
8 9 4
7 6 5

代码:

function demo(num) {
	var num = parseInt(num);
	if(isNaN(num) || num <= 0) {
		console.log('请输入有效的正整数!');
		return;
	}

	var powVal = Math.pow(num,2);
	var result = new Array(num);
	var row = 0,col = 0;
	var rowLimit = [0,num - 1];
	var colLimit = [0,num - 1];

	for(var i = 1; i <= powVal; i++) {
		result[row] = result[row] || new Array(num);

		result[row][col] = i == powVal ? '[' + i + ']' : i;

		if(col == colLimit[1] && row != rowLimit[1]) {
			row++ ;
		} else if(row == rowLimit[1] && col != colLimit[0]) {
			col--;
		} else if(col == colLimit[0] && row != rowLimit[0]) {
			row--;
		} else if(row == rowLimit[0] && col != colLimit[1]) {
			col++;
		}

		if(row == rowLimit[0] && col == colLimit[0]) {
			row = rowLimit[0] + 1;
			col = colLimit[0] + 1;
			rowLimit = [row,rowLimit[1] - 1];
			colLimit = [col,colLimit[1] - 1];
		}
	}

	for(var i = 0, l = result.length; i < l; i++) {
		console.log(result[i].join('   '));
	}
}

思路比较简单,就是将矩阵的所有元素,用一个二维数组存放,然后从外向内,一层层设置相应位置元素的值。实现逻辑也比较简单,假如数为5,那么知道最外层的左上角和右下角的点分别是0,0;5,5,由外向内第二层左上角和右下角的点就分别是1,1;4,4,就是拿前一个外层的左上角的点的x,y都加1和右下角的点的x , y都减1得到的;然后在打印每一层时,弄清楚拐角的判断规则即可,顶行col++,右行row++,底行col--,左行row--。

if(col == colLimit[1] && row != rowLimit[1]) {
			row++ ;
		} else if(row == rowLimit[1] && col != colLimit[0]) {
			col--;
		} else if(col == colLimit[0] && row != rowLimit[0]) {
			row--;
		} else if(row == rowLimit[0] && col != colLimit[1]) {
			col++;
		}

最终效果:

javascript: 顺时针打印出1到一个数的平方矩阵

你可能感兴趣的:(javascript: 顺时针打印出1到一个数的平方矩阵)