矩阵(二维数组)旋转

向左或向右旋转90度

基本思想是把它当作层,我们每次旋转一层。

假设我们有一个 4 x4

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

旋转后顺时针旋转 90

13 9 5 1
14 10 6 2 
15 11 7 3
16 12 8 4

我们先分解一下,首先旋转 4个角

1 4
13 16

然后我们旋转下面的菱形

2
8
9
15
然后是 2和倾斜的菱形

3
5
12
14
这样照顾外缘基本上一个壳,直到我们这么做

最后一个中间的方块( 或者如果是奇数,最后一个不移动的元素)

6 7
10 11
现在我们来计算每个层的索引,假设我们总是使用最外层的层,我们正在做

[0,0] -> [0,n-1], [0,n-1] -> [n-1,n-1], [n-1,n-1] -> [n-1,0], and [n-1,0] -> [0,0]
[0,1] -> [1,n-1], [1,n-2] -> [n-1,n-2], [n-1,n-2] -> [n-2,0], and [n-2,0] -> [0,1]
[0,2] -> [2,n-2], [2,n-2] -> [n-1,n-3], [n-1,n-3] -> [n-3,0], and [n-3,0] -> [0,2]

等等直到我们到达边缘

一般情况下,模式是

[0,i] -> [i,n-i], [i,n-i] -> [n-1,n-(i+1)], [n-1,n-(i+1)] -> [n-(i+1),0], and [n-(i+1),0] to [0,i]

  • 向右旋转90度
private static char[][] rotateRight90(String[] in) {
        char[][] inChar = toCharArray(in);
        char tmp;
        int n = in.length;
        for (int i = 0; i < n / 2; i++) {
            for (int j = i + 1; j < n - i; j++) {
                System.out.println("转换" + i + "," + j);
                tmp = inChar[i][j];
                inChar[i][j] = inChar[n - 1 - j][i];
                inChar[n - 1 - j][i] = inChar[n - 1 - i][n - 1 - j];
                inChar[n - 1 - i][n - 1 - j] = inChar[j][n - 1 - i];
                inChar[j][n - 1 - i] = tmp;
            }
        }
        return inChar;
    }
  • 向左旋转90度

旋转180度

a[i][j] = a[n-i-1][n-j-1],直接替换即可

private static char[][] rotate180(String[] in) {
        char[][] inChar = toCharArray(in);
        char tmp;
        int n = in.length;
        for (int i = 0; i <= n / 2; i++) {
            for (int j = 0; j < n - i; j++) {
                tmp = inChar[i][j];
                inChar[i][j] = inChar[n - i - 1][n - j - 1];
                inChar[n - i - 1][n - j - 1] = tmp;
            }
        }
        return inChar;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 3,160评论 0 6
  • 爱情的模样 似曾相识却从未蒙面 若喜欢,一切皆是好的样子 连犯错都觉得可爱 若不爱,好的也是过错 连呼吸都是多余 ...
    茉颜阅读 224评论 0 2
  • 今天是家人各自學習安排的日子, 一早我就只身參加學習。 少年的一天充實爾喜悅, 直到傍晚時分才接到晚飯自有安排的電...
    千吉change阅读 304评论 0 2
  • 土木建筑学院风景园林1601班认识实习 为期五天 分别参观的地点有:①银川西部影视城②三沙源③森林公园④文化园⑤...
    SexisZero阅读 501评论 0 0
  • 一、学习目标 掌握六个符号(横、圈、点、波、捺、角)所代表的读音,从而做到,不借助国际音标,轻松拼读任何英语单词和...
    詹小虫阅读 3,787评论 13 19

友情链接更多精彩内容