3. (const vector<int>& a, const vector<int>& b) :这是 lambda 表达式的参数列表。这里有两个参数 a 和 b ,它们都是 const vector<int>& 类型的引用。这意味着 a 和 b 是两个常量引用,指向 vector<int> 类型的容器。
4. { return a[0] < b[0]; } :这是 lambda 表达式的函数体。它返回 a[0] < b[0] 的结果。这里的 a[0] 和 b[0] 分别表示 a 和 b 这两个 vector 的第一个元素。整个表达式返回一个布尔值,表示 a 的第一个元素是否小于 b 的第一个元素
738.单调递增的数字
(1)题目描述:
(2)解题思路:
class Solution {
public:
int monotoneIncreasingDigits(int N) {
string strNum = to_string(N);
// flag用来标记赋值9从哪里开始
// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
int flag = strNum.size();
for (int i = strNum.size() - 1; i > 0; i--) {
if (strNum[i - 1] > strNum[i] ) {
flag = i;
strNum[i - 1]--;
}
}
for (int i = flag; i < strNum.size(); i++) {
strNum[i] = '9';
}
return stoi(strNum);
}
};
(3)总结:
1。这道题应该从后向前遍历,如果不符合弟曾国要求就让前一位减一
2.想不通为什那么这个位置往后都要变为“9”的话,可以拿数字100举例,推一下
3.to_string(N) 是一个函数调用。它可以将各种类型的数值(如 int 、 float 、 double 等)转换为 string 类型。这里的 N 是一个变量,它的值将被转换为字符串
4. stoi 函数会尝试将字符串 str 转换为一个整数,并返回转换后的整数值
968.监控二叉树
(1)题目描述:
(2)解题思路:
class Solution {
private:
int result;
int traversal(TreeNode* cur) {
// 空节点,该节点有覆盖
if (cur == NULL) return 2;
int left = traversal(cur->left); // 左
int right = traversal(cur->right); // 右
// 情况1
// 左右节点都有覆盖
if (left == 2 && right == 2) return 0;
// 情况2
if (left == 0 || right == 0) {
result++;
return 1;
}
// 情况3
if (left == 1 || right == 1) return 2;
// 这个 return -1 逻辑不会走到这里。
return -1;
}
public:
int minCameraCover(TreeNode* root) {
result = 0;
// 情况4
if (traversal(root) == 0) { // root 无覆盖
result++;
}
return result;
}
};