/** * 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 * 要求进行原地操作!(即不开辟额外的存储空间) * * 可以分两步走。 第一步交换主对角线两侧的对称元素,第二步交换第i行和第n-1-i行,即得到结果 * 原图: 第一步操作后: 第二步操作后: * 1 2 3 4 1 5 9 13 4 8 12 16 * 5 6 7 8 2 6 10 14 3 7 11 15 * 9 10 11 12 3 7 11 15 2 6 10 14 * 13 14 15 16 4 8 12 16 1 5 9 13 */ /** * 生成一个矩阵 */ public void q5_1(){ //这里是逆时针旋转,顺时针换个对角线啊 int[][] arr = new int[4][4]; int num = 0; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ arr[i][j] = ++num; System.out.print(arr[i][j]+"\t"); } System.out.println('\n'); } System.out.println("====================第一步==="); for(int i=0;i<4;i++){ for(int j=0;j<i;j++){ System.out.println("before ==> arr["+i+"]["+j+"] = "+arr[i][j]+"\t arr["+j+"]["+i+"] = "+arr[j][i]); int temp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = temp; System.out.println("after ==> arr["+i+"]["+j+"] = "+arr[i][j]+"\t arr["+j+"]["+i+"] = "+arr[j][i]); } } for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println('\n'); } System.out.println("====================第二步==="); for(int i=0;i<2;i++){ for(int j=0;j<4;j++){ int temp = arr[i][j]; arr[i][j] = arr[3-i][j]; arr[3-i][j] = temp; } } for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println('\n'); } }
打印结果为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ====================第一步=== before ==> arr[1][0] = 5 arr[0][1] = 2 after ==> arr[1][0] = 2 arr[0][1] = 5 before ==> arr[2][0] = 9 arr[0][2] = 3 after ==> arr[2][0] = 3 arr[0][2] = 9 before ==> arr[2][1] = 10 arr[1][2] = 7 after ==> arr[2][1] = 7 arr[1][2] = 10 before ==> arr[3][0] = 13 arr[0][3] = 4 after ==> arr[3][0] = 4 arr[0][3] = 13 before ==> arr[3][1] = 14 arr[1][3] = 8 after ==> arr[3][1] = 8 arr[1][3] = 14 before ==> arr[3][2] = 15 arr[2][3] = 12 after ==> arr[3][2] = 12 arr[2][3] = 15 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 ====================第二步=== 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13
========================================================================
/** * 写一个函数处理一个MxN的矩阵,如果矩阵中某个元素为0,那么把它所在的行和列都置为0. */ public void q5_2(){ long startTime = System.currentTimeMillis(); final int rowLen = 40; final int colLen = 55; int[][] arr= new int[rowLen][colLen]; Random random = new Random(); for(int i=0;i<rowLen;i++){ for(int j=0;j<colLen;j++){ arr[i][j] = random.nextInt(10); System.out.print(arr[i][j]+"\t"); } System.out.println('\n'); } boolean[] rows = new boolean[rowLen]; boolean[] cols = new boolean[colLen]; for(int i=0;i<rowLen;i++){ for(int j=0;j<colLen;j++){ if(arr[i][j]==0){ //这里可以不用标识,直接写for循环 rows[i] = true; cols[j] = true; // for(int r=0;r<rowLen;r++){ // arr[r][j] = 0; // } // for(int c=0;c<colLen;c++){ // arr[i][c] = 0; // } } } } for(int i=0;i<rowLen;i++){ for(int j=0;j<colLen;j++){ if(rows[i] || cols[j]){ arr[i][j] = 0; } } } System.out.println("=========结果===="); for(int i=0;i<rowLen;i++){ for(int j=0;j<colLen;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println('\n'); } System.out.println("运行时间 : "+(System.currentTimeMillis()-startTime)); }
原文地址:http://blog.csdn.net/sc772739805/article/details/32708827