题目描述
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
示例1
输入
[[1,2,3],[4,5,6],[7,8,9]],3
返回值
[[7,4,1],[8,5,2],[9,6,3]]
class Solution {
public:
vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
// write code here
vector<vector<int>> arr=mat;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arr[j][n-1-i]=mat[i][j];//关键
}
}
return arr;
}
};
题目描述
请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:
每一行的数字都从左到右排序
每一行的第一个数字都比上一行最后一个数字大
例如:
对于下面的矩阵:
[
[1, 3, 5, 9],
[10, 11, 12, 30],
[230, 300, 350, 500]
]
要搜索的目标值为3,返回true;
示例1
输入
[[1,3,5,9],[10,11,12,30],[230, 300, 350, 500]],3
返回值
true
class Solution {
public:
/**
*
* @param matrix int整型vector<vector<>>
* @param target int整型
* @return bool布尔型
*/
bool searchMatrix(vector<vector<int> >& matrix, int target) {
// write code here
//二维数组转化为一维数组,然后用二分查找
int row=matrix.size();//行
if(row==0)return false;
int col=matrix[0].size();//列
int count=row*col;
int begin=0;
int end=count-1;
while(begin<=end){
int mid=(begin+end)/2;
int a=mid/col;//行
int b=mid%col;//列
if(target==matrix[a][b])return true;
else if(target<matrix[a][b])end=mid-1;
else begin=mid+1;
}
return false;
}
};