/**
* 一张图像表示成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