class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int count = 1;
//反向迭代
for (auto it = digits.rbegin(); it != digits.rend(); ++it) {
if (count == 0)break; //不进位
*it += count;
count = *it / 10;
*it %= 10;
}
if (count == 1)
digits.insert(digits.begin(), 1);
return digits;
}
};
leecode 0724
class Solution {
public:
int pivotIndex(vector<int>& nums) {
//求总和
int sum;
int n=0;//部分和
sum=nums[0];
for(int i=1;i<nums.size();i++)
{
sum+=nums[i];
}
int inx = -1;
for(int i=0;i<nums.size();i++)
{
if(sum-nums[i]==n*2)
{
inx=i;
break;
}
n+=nums[i];
}
return inx;
}
};
螺旋矩阵
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>res;
int m =matrix.size();
int n =matrix[0].size();
int up = 0, down = m - 1, left = 0, right = n - 1;
while (true)
{
//向右
for (int i = left; i <= right; i++) res.push_back(matrix[up][i]);
if (++up > down) break;
//向下
for (int i = up; i <= down; i++) res.push_back(matrix[i][right]);
if (--right < left) break;
//向左
for (int i = right; i >= left; i--) res.push_back(matrix[down][i]);
if (--down < up) break;
//向上
for (int i = down; i >= up; i--) res.push_back(matrix[i][left]);
if (++left > right) break;
}
return res;
}
};
对角矩阵
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size(), r = 0, c = 0, k = 0;
vector<int> res(m * n);
vector<vector<int>> d{{-1,1}, {1,-1}};//定义对角线方向
for (int i = 0; i < m * n; ++i) {
res[i] = mat[r][c];
r += d[k][0];
c += d[k][1];
if (r >= m) {r = m - 1; c += 2; k = 1 - k;}
if (c >= n) {c = n - 1; r += 2; k = 1 - k;}
if (r < 0) {r = 0; k = 1 - k;}
if (c < 0) {c = 0; k = 1 - k;}
}
return res;
}
};