CCI(2)-- Arrays and Strings

来源:互联网 发布:playclub捏脸详细数据 编辑:程序博客网 时间:2024/06/07 05:24

题目

给一个int类型的NxN矩阵,旋转90°

解题思路

书里的解题思路是把矩阵从外到里按层遍历,每次遍历过程中对四边的每一个数字进行遍历。

先上一个4x4矩阵的代码:

void rotate(int matrix[4][4], int n) {    for (int layer = 0; layer < n / 2; layer++) {        int first = layer;        int last = n - 1 - layer;        for (int i = first; i < last; i++) {            int offset = i - first;            // save top            int top = matrix[first][i];            // top = right            matrix[first][i] = matrix[i][last];            // right = bottom            matrix[i][last] = matrix[last][last - offset];            // bottom = left            matrix[last][last - offset] = matrix[last - offset][first];            // left = top            matrix[last - offset][first] = top;        }    }}

1

再上一个通用版代码

void rotate(int **matrix, int n) {    for (int layer = 0; layer < n / 2; layer++) {        int first = layer;        int last = n - 1 - layer;        for (int i = first; i < last; i++) {            int offset = i - first;            // save top            int top = *((int *)matrix + first * n + i);            // top = right            *((int *)matrix + first * n + i) = *((int *)matrix + i * n + last);            // right = bottom            *((int *)matrix + i * n + last) = *((int *)matrix + last * n + last - offset);            // bottom = left            *((int *)matrix + last * n + last - offset) = *((int *)matrix + (last - offset) * n + first);            // left = top            *((int *)matrix + (last - offset) * n + first) = top;        }    }}

测试代码

void test() {    int matrix[4][4] = {1, 2, 3, 4,                         5, 6, 7, 8,                         9, 10, 11, 12,                         13, 14, 15, 16};    rotate1((int **)matrix, 4);    for (int i = 0; i < 4; i++) {        for (int j = 0; j < 4; j++) {            printf("%d\t", matrix[i][j]);        }        putchar('\n');    }}int main() {    test();}
原创粉丝点击