我为什么会首先提出通过一层循环输出二维方阵在这里发挥了作用,
也就是说我们找到了表示数组每一行的具体算法ary[i/rank][i%rank]
其中i/rank 表示行号,i%rank表示列号。那么我们还需要找到表示
数组每列的算法就可以解决问题了。我们需要借助一个一维数组类实现
y = [0,0,0,0...] 这里需要找到y数组的倒数第几列的表示算法。
[(i%rank)*rank+(rank-i/rank-1)]。这个表达式相当于把每一行变成了倒数第几列。
代码实现
let ary =[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];let rank = ary.length;functionrotate(ary,rank){let y =Array(rank*rank).fill();for(let i =0; i < rank*rank; i++){
y[(i%rank)*rank+(rank-parseInt(i/rank)-1)]= ary[parseInt(i/rank)][i%rank];}// 重新覆盖for(let i =0; i <rank*rank; i++){
ary[parseInt(i/rank)][i%rank]= y[i];}return ary;}
ary =rotate(ary,rank);
console.log(ary)