gpt4 book ai didi

javascript - 我需要使用 underscore.js 旋转数组的矩阵元素。我有解决方案,但代码很大我想缩短它?

转载 作者:行者123 更新时间:2023-11-29 22:47:10 24 4
gpt4 key购买 nike

我使用 underscore.js 计算数组的矩阵元素。我有解决方案,但代码量很大,我想缩短它吗?

数组循环移位函数

function circularShift(mat) {
let R, C;
R = mat.length;
for (let i = 0; i < R; i++) {
C = mat[i].length;
}
let m = R, n = C;
let row = 0, col = 0, prev = 0, curr = 0;

if (row + 1 == m || col + 1 == n)
return;

prev = mat[row + 1][col];
for (let i = col; i < n; i++) {
curr = mat[row][i];
mat[row][i] = prev;
prev = curr;
}
row++;
for (let i = row; i < m; i++) {
curr = mat[i][n - 1];
mat[i][n - 1] = prev;
prev = curr;
}
n--;
if (row < m) {
for (let i = n - 1; i >= col; i--) {
curr = mat[m - 1][i];
mat[m - 1][i] = prev;
prev = curr;
}
}
m--;
if (col < n) {
for (let i = m - 1; i >= row; i--) {
curr = mat[i][col];
mat[i][col] = prev;
prev = curr;
}
}
col++;

var finalArr = [];
for (i = 0; i < R; i++) {
finalArr.push(mat[i]);
}

console.log(finalArr)
}

//var arr = [[0, 0, 1, 2], [1, 0, 0, 1], [2, 1, 0, 1]];
var arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];

console.log(arr);
circularShift(arr);

我的输出如下,我希望使用下划线或 loadash 的代码更少,但输出相同

输入

1    2    3
4 5 6
7 8 9

输出:

4    1    2
7 5 3
8 9 6

从最外层开始逐一旋转所有元素环。要旋转环,我们需要执行以下操作。 1)移动顶行的元素。 2) 移动最后一列的元素。 3)移动底行的元素。 4) 移动第一列的元素。有内圈时,对内圈重复上述步骤。

最佳答案

你只能移动数组的一部分,如下例所示,

|1    2|-> 3
4 5 6
7 8 9

那么你可以将 ij 的值作为下边的起始值。

function circularShift(matrix) {
var result = matrix.map(a => a.slice()),
i = 0,
j = 0;

for (; j < matrix[i].length - 1; j++) result[i][j + 1] = matrix[i][j];
for (; i < matrix.length - 1; i++) result[i + 1][j] = matrix[i][j];
for (; j > 0; j--) result[i][j - 1] = matrix[i][j];
for (; i > 0; i--) result[i - 1][j] = matrix[i][j];
return result;
}

var arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];

console.log(arr.map(a => a.join(' ')).join('\n'));
console.log(circularShift(arr).map(a => a.join(' ')).join('\n'));

关于javascript - 我需要使用 underscore.js 旋转数组的矩阵元素。我有解决方案,但代码很大我想缩短它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58162478/

24 4 0
文章推荐: javascript - 带闭包的对象中键的排序函数 - Javascript
文章推荐: javascript - 如何在递归生成的