天天学编程Day16
每日一题
class Solution {
// 就是先序遍历,然后在遍历的过程中,记录当前的和,然后判断是否满足条件
// 设置一个成员变量flag,用来记录是否满足条件。
// 满足条件直接return,不满足条件继续递归。这样可以减少时间复杂度。
// 条件为,当前的和等于targetSum,并且当前的节点是叶子节点。
// 应该可以把成员变量当成参数传递给dfs,我是直接用的成员变量。
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr)return false;// 空树的情况
this->root = root;// 记录根节点
this->targetSum = targetSum;// 记录目标和
this->flag = false;// 初始化flag
dfs(root,root->val);// 从根节点开始遍历
return flag;
}
void dfs(TreeNode* root,int cur_sum)
{
if(cur_sum == targetSum&&root->left == nullptr&&root->right == nullptr)// 找到了一条路径
{
flag = true;// 标记找到了一条路径
}
if(root->left)dfs(root->left,cur_sum + root->left->val);// 左子树
if(root->right)dfs(root->right,cur_sum + root->right->val);// 右子树
}
private:
int targetSum;
bool flag;
TreeNode* root;
};
什么是 C++ 中的常量表达式? 有什么用途?
在 C++ 中,常量表达式(Constant Expression)是指在编译期就能计算出结果的表达式。其结果在程序运行过程中是不可改变的,并且这个结果必须是编译时常量,例如整数常量、枚举常量、用常量表达式初始化的const对象等。
用途:
定义数组大小、作为模版参数、在编译期间进行计算
const int a = 10; // a是常量表达式,因为它是一个const整数,在编译期就确定了值
constexpr int b = 20; // b是常量表达式,constexpr明确表示这是一个编译期常量
enum class Color { Red, Green, Blue };
Color c = Color::Green; // c是常量表达式,枚举类型的值在编译期确定
如何判断一个表达式是否是常量表达式?
使用constexpr关键字判断(C++11 及以上):如果一个变量或函数被声明为constexpr,那么在符合一定条件下它就是一个常量表达式。例如,constexpr int func(int x) {return x * 2;},只要传入的参数x是常量表达式,那么func的返回值也是常量表达式。
编译期可求值规则:
基本数据类型(如int、double等)的字面值(如1、3.14)是常量表达式。
用常量表达式初始化的const对象是常量表达式(但要注意指针类型的const对象情况比较复杂,例如const int* p不是常量表达式,但const int a = 10; const int* p = &a,*p是常量表达式)。
算术、逻辑和位运算等操作符,只要操作数是常量表达式,其结果也是常量表达式。例如1 + 2、true && false等。
引用类型如果引用的是常量表达式,那么这个引用可以用于常量表达式。例如const int& ref = 10;,ref可以用于常量表达式。
枚举类型的成员是常量表达式。
不涉及运行时行为的函数(如constexpr函数)在满足条件时返回常量表达式。例如constexpr int square(int x) {return x * x;},当x为常量表达式时,square(x)是常量表达式。
原文地址:https://blog.csdn.net/qq_73301411/article/details/143805343
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!