对于自己之前写的内容应该做更好的梳理。
1. 48:Rotate Image 传送门:https://leetcode.com/problems/rotate-image/
大意:给出n*n的一个矩形,进行90‘顺时针旋转。
题解:1.思路:对矩阵,第i行j列的元素逆转过来后就是另一个矩阵的j行n-i列。
AC代码如下:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int length=matrix.size();
if(matrix.empty()) return;
vector<vector<int> > ans(matrix.size());
for(int i=0;i<matrix.size();i++)
ans[i].resize(length);
if(matrix[0].size()!=1){
for(int i=0;i<length;i++)
for(int j=0;j<length;j++)
ans[j][length-1-i]=matrix[i][j];
for(int i=0;i<length;i++)
for(int j=0;j<length;j++)
matrix[i][j]=ans[i][j];
}
}
};
2. 66:Pluse One 传送门: https://leetcode.com/problems/plus-one/
大意:一个数组表示的是一个数,对它执行加1操作。 most significant digit:最高有效位(CSAPP)
题解:进行模拟操作。注意如果最后还有进位的话,则要在数组前再加1个1。
AC代码:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
if(digits.empty()) return digits;
int length=digits.size();
int carry=1;
int sum;
for(int i=length-1;i>=0;i--)
{
sum=digits[i]+carry;
digits[i]=sum%10;
carry=sum/10;
}
if(carry==1) digits.insert(digits.begin(),1);
return digits;
}
};
大意:帕斯卡三角形是数组里的必考题。
题解:模拟操作。每次都加入1后用公式计算出结果。注意一些特殊情况(empty(),只有1个等)
AC代码:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int> > ans;
if(numRows==0) return ans;
ans.resize(numRows);
ans[0].push_back(1);
//if(numRows==1) return ans;
for(int i=1;i<numRows;i++)
{
ans[i].push_back(1);
for(int j=0;j<ans[i-1].size()-1;j++)
{
int temp=ans[i-1][j+1]+ans[i-1][j];
ans[i].push_back(temp);
}
ans[i].push_back(1);
}
return ans;
}
};
大意:是上一题的演进版,要求出三角形第几行的具体值。
题解:在上一题的代码略作修改即可。注意在定义数组ans时要定好大小。
AC代码:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int> > ans;
vector<int> a;
///if(rowIndex==0) return a;
ans.resize(rowIndex+1);
ans[0].push_back(1);
//if(numRows==1) return ans;
for(int i=1;i<=rowIndex;i++)
{
ans[i].push_back(1);
for(int j=0;j<ans[i-1].size()-1;j++)
{
int temp=ans[i-1][j+1]+ans[i-1][j];
ans[i].push_back(temp);
}
ans[i].push_back(1);
}
return ans[rowIndex];
}
};
5. 88:Merge Sorted Array 传送门: https://leetcode.com/problems/merge-sorted-array/
大意:两个数组已经给定排序,要求返回合并后的有序数组。
题解:按照题意要求进行即可。
AC代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=0;i<n;i++)
nums1[(m+i)]=nums2[i];
sort(nums1.begin(),nums1.end());
}
};