解题报告
2319. 判断矩阵是否是一个 X 矩阵
题目链接:2319. 判断矩阵是否是一个 X 矩阵
解题思路
遍历到对角线上时(主对角线横纵坐标相等,副对角线横纵坐标之和等于矩阵行数减1),判断该数字是否不为0。
遍历非对角线上时,判断该数字是否为0。
解题代码
class Solution {
public:
bool checkXMatrix(vector<vector<int>>& grid) {
int n = grid.size();
for(int i = 0; i < n; i ++ ){
for(int j = 0; j < n; j ++ ){
if(i == j || i + j == n - 1){
if(grid[i][j] == 0){
return false;
}
}else{
if(grid[i][j] != 0){
return false;
}
}
}
}
return true;
}
};
599. 两个列表的最小索引总和
题目链接:599. 两个列表的最小索引总和
解题思路
双重遍历,找到两个相等的字符串,并计算索引和,找到索引和最小的字符串,如果索引和相等,则将该字符串加到答案数组中。
解题代码
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
vector<string> ans;
int sum = 2010;
int size1 = list1.size(), size2 = list2.size();
for(int i = 0; i < size1; i ++ ){
for(int j = 0; j < size2; j ++ ){
if(list1[i] == list2[j]){
if(sum > i + j){
ans.clear();
ans.push_back(list1[i]);
sum = i + j;
}else if(sum == i + j){
ans.push_back(list1[i]);
}
}
}
}
return ans;
}
};
674. 最长连续递增序列
题目链接:674. 最长连续递增序列
解题思路
双指针,i指针维护一个递增序列的开头,j指针向后找是否递增。
解题代码
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
int n = nums.size() - 1;
int i = 0, j = 0, max = 1;
while(j < n){
while(j < n && nums[j] < nums[j + 1]){
j ++ ;
}
if(j - i + 1 > max){
max = j - i + 1;
}
i = j + 1;
j ++ ;
}
return max;
}
};
989. 数组形式的整数加法
题目链接:989. 数组形式的整数加法
解题思路
将k也处理为数组的形式,将num数组反转,数组低位存储低位数字,便于加法的进位。
模拟人工加法,用t
存储进位,最后如果t
不为0,要把t
加上。
将数组反转回来。
解题代码
class Solution {
public:
vector<int> addToArrayForm(vector<int>& num, int k) {
vector<int> ans;
vector<int> knum;
while(k > 0){
knum.push_back(k % 10);
k /= 10;
}
reverse(num.begin(), num.end());
int t = 0;
for(int i = 0; i < num.size() || i < knum.size(); i ++ ){
if(i < num.size()) t += num[i];
if(i < knum.size()) t += knum[i];
ans.push_back(t % 10);
t /= 10;
}
if(t) ans.push_back(t);
reverse(ans.begin(), ans.end());
return ans;
}
};