【第190場周賽】Leetcode-1457 二叉樹中的僞迴文路徑

位運算計數
思路類似於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);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章