如何在JavaScript中将矩阵顺时针旋转一个元素?代码调试求助
矩阵顺时针旋转一位:代码检查与输出优化
首先,你的旋转逻辑是完全正确的!经过测试,rotateMatrix函数确实能把目标3x3矩阵转换成你期望的结果。问题主要出在输出格式的可读性上,我们可以调整一下打印方式让结果更直观,同时优化代码细节让它更健壮。
代码优化与输出调整
你的核心旋转逻辑没问题,我做了两处小改进:
- 让
maxCol的初始化兼容非方阵(不影响你当前的3x3需求); - 优化输出格式,把逗号分隔的字符串改成空格分隔的矩阵样式,让结果一目了然。
修正后的完整代码如下:
var matrix = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]; function rotateMatrix(matrix) { // 边界索引标记 let maxRow = matrix.length - 1; let maxCol = matrix[0].length - 1; // 兼容非方阵,适配更通用场景 let row = 0; let col = 0; // 按层处理矩阵的每一个环 while (row < maxRow && col < maxCol) { // 初始值取当前环左下角的元素(对应你提到的4) let previous = matrix[row + 1][col]; // 处理顶部行:从左到右替换元素 for (let i = col; i <= maxCol; i++) { let current = matrix[row][i]; matrix[row][i] = previous; previous = current; } row++; // 下移一行,进入右侧列处理 // 处理右侧列:从上到下替换元素 for (let j = row; j <= maxRow; j++) { let current = matrix[j][maxCol]; matrix[j][maxCol] = previous; previous = current; } maxCol--; // 左移一列,进入底部行处理 // 处理底部行:从右到左替换元素 for (let j = maxCol; j >= col; j--) { let current = matrix[maxRow][j]; matrix[maxRow][j] = previous; previous = current; } maxRow--; // 上移一行,进入左侧列处理 // 处理左侧列:从下到上替换元素 for (let i = maxRow; i >= row; i--) { let current = matrix[i][col]; matrix[i][col] = previous; previous = current; } col++; // 右移一列,准备处理下一层环(如果存在) } } // 打印原始矩阵,用空格分隔更像矩阵样式 console.log("原始矩阵:"); matrix.forEach(row => console.log(row.join(' '))); // 执行旋转操作 rotateMatrix(matrix); // 打印旋转后的矩阵,换行分隔更清晰 console.log("\n旋转后的矩阵:"); matrix.forEach(row => console.log(row.join(' ')));
最终输出效果
运行代码后,控制台会输出清晰的矩阵格式:
原始矩阵: 1 2 3 4 5 6 7 8 9 旋转后的矩阵: 4 1 2 7 5 3 8 9 6
完全匹配你期望的转换效果!如果后续需要处理更大的方阵(比如4x4),这个代码逻辑也能正常工作,因为它是按层处理每个环的元素。
内容的提问来源于stack exchange,提问作者Valiant Lupori Buzzactaxe
相关产品推荐
相关产品推荐

