鉴于使用位掩码的解决方案,我无法理解代码中标记的条件评估
Given solution using Bitmask, I am unable to understand the evaluation of condition as marked in code
我无法理解这里使用的位掩码,给定的代码是在包含数字 0-9 的二叉树中查找没有回文路径的解决方案。我在 if 语句中标记了代码行。
这是LeetCode竞赛题。题目如上:
二叉树中的伪回文路径,
给定一棵二叉树,其中节点值是从 1 到 9 的数字。如果路径中节点值的至少一个排列是回文,则称二叉树中的路径是伪回文。
Return从根节点到叶节点的伪回文路径数
int pseudoPalindromicPaths (TreeNode* root) {
return dfs(root, 0);
}
int dfs(TreeNode* root, int count) {
if (!root) return 0;
count ^= 1 << (root->val - 1);
int res = dfs(root->left, count) + dfs(root->right, count);
if (root->left == root->right && (count & (count - 1)) == 0) res++;
//--------------------------------------^--THIS SECTION-----
count ^= 1 << (root->val - 1);
return res;
}
count & (count - 1) == 0
如果计数是 2 的幂,则此语句为真。
示例:计数 = 8
00001000 = 8
&
00000111 = (8-1) = 7
------------
00000000 = 0
我无法理解这里使用的位掩码,给定的代码是在包含数字 0-9 的二叉树中查找没有回文路径的解决方案。我在 if 语句中标记了代码行。
这是LeetCode竞赛题。题目如上:
二叉树中的伪回文路径, 给定一棵二叉树,其中节点值是从 1 到 9 的数字。如果路径中节点值的至少一个排列是回文,则称二叉树中的路径是伪回文。
Return从根节点到叶节点的伪回文路径数
int pseudoPalindromicPaths (TreeNode* root) {
return dfs(root, 0);
}
int dfs(TreeNode* root, int count) {
if (!root) return 0;
count ^= 1 << (root->val - 1);
int res = dfs(root->left, count) + dfs(root->right, count);
if (root->left == root->right && (count & (count - 1)) == 0) res++;
//--------------------------------------^--THIS SECTION-----
count ^= 1 << (root->val - 1);
return res;
}
count & (count - 1) == 0
如果计数是 2 的幂,则此语句为真。
示例:计数 = 8
00001000 = 8
&
00000111 = (8-1) = 7
------------
00000000 = 0