1. 旋转图像

题目:
img_20.png
img_21.png

题解:
就是从下到上每一列变为了每一行,比如第一列变为了第一行,依次类推。
这里需要借用一个辅助数组。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public void rotate(int[][] matrix) {
//辅助矩阵
int[][] copy = new int[matrix.length][];
//复制一个矩阵
for(int i=0;i<matrix.length;i++){
copy[i] = Arrays.copyOf(matrix[i],matrix[i].length);
}

for(int i =0;i<matrix.length;i++){
for(int j = 0;j<matrix.length;j++){
matrix[j][matrix.length-i-1] = copy[i][j];
}
}


}
}

2. 搜索二位矩阵II

题目:
img_22.png
img_23.png
img_24.png

题解:
非常经典的二分查找,对每一行进行二分就可以。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
//经典的二分
for(int i=0;i<matrix.length;i++){
if(is(matrix[i],target)) return true;
}
return false;
}

boolean is(int[] matrix, int target) {
int left = 0;
int right = matrix.length-1;
while(left<=right){
int mid = (left+right)/2;
if(matrix[mid] == target) return true;

if(matrix[mid] > target){
right = mid-1;
}else{
left = mid+1;
}
}
return false;
}
}