C#中顺时针旋转二维矩阵:求补全反转部分代码
解决C#顺时针旋转二维矩阵的问题
首先,你的代码存在两个关键问题:
- 转置逻辑重复交换:原转置循环中i和j都从0开始,会导致每个元素对被交换两次,最终矩阵没有变化。
- 缺少正确的反转步骤:顺时针旋转90度的标准流程是「转置矩阵 → 反转每一行」,同时打印逻辑需要对应调整。
修正后的完整代码
static void RotateMatrix() { // 待旋转的二维数组 int[,] matrix = new int[,] { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // 1. 正确转置矩阵:只交换上三角和下三角元素,避免重复交换 int n = matrix.GetLength(0); for (int i = 0; i < n; i++) { // j从i+1开始,跳过对角线元素和已交换过的位置 for (int j = i + 1; j < n; j++) { var temp = matrix[i, j]; matrix[i, j] = matrix[j, i]; matrix[j, i] = temp; } } // 2. 反转每一行,完成顺时针90度旋转 for (int i = 0; i < n; i++) { // 交换行内左右对称的元素 for (int j = 0; j < n / 2; j++) { var temp = matrix[i, j]; matrix[i, j] = matrix[i, n - 1 - j]; matrix[i, n - 1 - j] = temp; } } // 3. 按行打印旋转后的矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write(matrix[i, j] + " "); } Console.WriteLine(); } }
步骤解释
正确转置:
转置时让j从i+1开始遍历,只交换矩阵中(i,j)和(j,i)的元素(跳过对角线和已交换的位置),得到转置后的矩阵:1 4 7 2 5 8 3 6 9反转每一行:
对转置后的每一行,交换行内第j个和第n-1-j个元素(左右对称交换),得到最终旋转后的矩阵:7 4 1 8 5 2 9 6 3按行打印:
调整打印逻辑为按行输出,确保结果和期望一致。
内容的提问来源于stack exchange,提问作者BranditoLmao
相关产品推荐
相关产品推荐

