提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、738单调递增的数字
写的无比复杂。。。。
cpp
class Solution {
public:
vector<int> getVec(int n) {
vector<int> nums;
while (n) {
nums.push_back(n % 10);
n /= 10;
}
reverse(nums.begin(), nums.end());
return nums;
}
int getNums(vector<int>& nums) {
int num = 0;
long flag = 1;
for (int i = nums.size() - 1; i >= 0; i --) {
num += nums[i] * flag;
flag *= 10;
}
return num;
}
int monotoneIncreasingDigits(int n) {
vector<int> nums = getVec(n);
for (int i = 1; i < nums.size(); i ++) {
if (nums[i] >= nums[i-1]) {
continue;
}
if (i == 1) {
nums[0] --;
for (int j = i; j < nums.size(); j ++) {
nums[j] = 9;
}
}
else {
while (i > 0) {
if (nums[i] > nums[i-1]) {
break;
}
i --;
}
nums[i] --;
for (int j = i + 1; j < nums.size(); j ++) {
nums[j] = 9;
}
}
}
return getNums(nums);
}
};
优化版:
cpp
class Solution {
public:
int monotoneIncreasingDigits(int n) {
string s = to_string(n);
int flag = s.size();
for (int i = s.size() - 1; i > 0; i --) {
if (s[i-1] > s[i]) {
s[i-1] --;
flag = i;
}
}
for (int j = flag; j < s.size(); j ++) {
s[j] = '9';
}
return stoi(s);
}
};
二、968监控二叉树
思路有的,但是写不出来。。。听完视频,原来思路也没有。
cpp
class Solution {
public:
int res;
int traversal(TreeNode* cur) {
if (cur == nullptr) {
return 2;
}
int left = traversal(cur->left);
int right = traversal(cur->right);
if (left == 2 && right == 2) {
return 0;
}
else if (left == 0 || right == 0) {
res ++;
return 1;
}
else if (left == 1 || right == 1) {
return 2;
}
return -1;
}
int minCameraCover(TreeNode* root) {
if (traversal(root) == 0) {
res ++;
}
return res;
}
};