位運算計數
思路類似於Leetcode-1371 每個元音包含偶數次的最長子字符串
關鍵點在於
怎麼記錄這些數,並且判斷他們是能構成迴文,即奇數個數字只能有一個。
將1-9映射到二進制位上,做異或和,這樣偶數的數字位會爲0,數字位爲1證明該數字有奇數個。
判斷sum數字位爲1的個數小於等於1
方法1:與1做&運算,然後不停右移,判斷最後一位
方法2:sum&(sum-1)==0
class Solution {
public:
int pseudoPalindromicPaths (TreeNode* root) {
return path(root,0);
}
int path(TreeNode* root,int sum){
if(root==NULL) return 0;
int num=pow(2,root->val-1);
sum=sum^num;
if(root->left==NULL&&root->right==NULL)
{
if(sum==0||(sum&(sum-1))==0)
return 1;
else
return 0;
}
return path(root->left,sum)+path(root->right,sum);
}
};