关于数组的旋转问题

1、给定一个N*N的数组,让其顺时针旋转九十度,输出旋转后的数组(携程2018研发岗笔试第二题)

  

分析:这个只涉及二维数组纵横坐标的交换,所以只用考虑数组的i,j之间的关系即可,附图(字丑勿嫌弃哈哈😄)

  

  

 1 package com.xiecheng;
 2 //携程笔试第二题:给定一个N*N的数组,让其顺时针旋转九十度(此方法是申请了一个N*N的额外空间)
 3 import java.util.Scanner;
 4 /*
 5  * 你要在最后输入一个非Int类型的值,不然控制台一直以为你没有输入结束,一直等待。例如2 3 1 4 2 c
 6  * 在扫描到最后一个c时,Scanner.hasNextInt()为false,如果只是输入2 3 1 4 2程序会一直等待
 7  */
 8 
 9 public class Main {
10     
11     public static void round(int arr[][]){
12         int arr1[][] = new int[arr[1].length][arr.length];
13         int index = arr.length-1;
14         for(int i=0;i<arr.length;i++,index--){
15             for(int j=0;j<arr[1].length;j++){
16                 arr1[j][index] = arr[i][j];17             }
18         }
19         print(arr1);
20     }
21     //输出
22     public static void print(int arr[][]){
23         for(int i=0;i<arr.length;i++){
24             for(int j=0;j<arr[1].length;j++){
25                 System.out.print(arr[j][i]);
26             }
27             System.out.println("   ");
28         }
29     }
30     
31     public static void main(String[] args) {
32         Scanner s = new Scanner(System.in);
33         int arr[][] = new int[3][3];
34         for(int i=0;i<3;i++){
35             for(int j=0;j<3;j++){
36                 arr[j][i] = s.nextInt();
37             }
38         }
39         round(arr);
40     }
41 }

 

2、一个二维矩阵进行逆置操作,也就是行变列列变行

如下图:

代码:

 1 package com.test1;
 2 
 3 public class Change1 {
 4      public static void transpose(){
 5          int  a[][]={{1,2,3},{4,5,6},{7,8,9}};
 6          System.out.println("转置前:");
 7          for(int i=0; i<=2;i++){
 8              for(int j=0;j<=2;j++ ){
 9                  System.out.print(a[i][j]+"("+i+j+")\t");
10                  }
11                  System.out.println();
12          }
13          //转置
14          for(int i=0; i<=2;i++){ 
15              for(int j=0;j<=i;j++ )//注意只能遍历一半,所以j<=i,如果全部遍历,则数据交换了两次,相当于没有置换
16              {
17                  int temp;
18                  temp=a[i][j];
19                  a[i][j]=a[j][i];
20                  a[j][i]=temp;
21              }
22          }
23          System.out.println("转置后");
24          for(int i=0; i<=2;i++){ 
25              for(int j=0;j<=2;j++ ){ 
26                  System.out.print([i][j]+"("+i+j+")\t");
27              }
28                System.out.println();
29          }
30      }
31      
32      public static void main(String[] args) {
33          transpose();
34     }
35 }

 

 

3、顺时针打印矩阵

  具体:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

  分析:

时间有点晚,后续再写

 

posted @ 2018-04-12 22:21  没有名字~  阅读(1682)  评论(0编辑  收藏  举报