程序员面试金典-1.7 旋转矩阵。给定一幅由 N ×N 矩阵表示的图像,其中每个像素的大小为 4 字节,编写 一种方法,将图像旋转 90 度。不占用额外内存空间能否做到?

图解:

代码解决:


public class RotateTest {
    public static void main(String[] args) {
        Integer[][] matrix = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};

        System.out.println("旋转前数组:");
        for (int i = 0; i < matrix.length; i++) {
            System.out.println(Arrays.toString(matrix[i]));
        }
        boolean result = rotate(matrix);
        System.out.println("是否可以旋转:" + result);
        if (result) {
            System.out.println("选择后数组:");
            for (int i = 0; i < matrix.length; i++) {
                System.out.println(Arrays.toString(matrix[i]));
            }
        }
    }
        private static boolean rotate(Integer[][] matrix) {
        // 判断是否为正方矩形
        int len = matrix.length;
        int el = 2;
        if (len == 0) {
            return false;
        }
        for (int i = 0; i < len; i++) {
            if (len != matrix[i].length) {
                System.out.println(i);
                return false;
            }
        }
        for (int layer = 0; layer < len / el; layer++) {
            int first = layer;
            int last = len -1 - layer;
            for (int j = first; j < last; j++) {
                int offset = j -first;
                // 存储上边
                int top = matrix[first][j];
                // 左边移动到上边
                matrix[first][j] = matrix[last - offset][first];
                // 下边移动到左边
                matrix[last - offset][first] = matrix[last][last - offset];
                // 右边移动到下边
                matrix[last][last - offset] = matrix[j][last];
                // 上边移动到右边
                matrix[j][last] = top;
            }
        }
        return true;
    }
}

posted @ 2021-11-04 09:48  樱花颂  阅读(159)  评论(0)    收藏  举报