您现在的位置是:主页 > news > 网站天天做收录有效果吗/软文营销定义
网站天天做收录有效果吗/软文营销定义
admin2025/5/19 22:37:27【news】
简介网站天天做收录有效果吗,软文营销定义,cpanel伪静态wordpress,html网站地图怎么做二叉树中的伪回文路径 主要是伪回文串的判定: 如果字符串是偶数、所有数字出现的次数必须是偶数。 如果是奇数,有且只有一种数字的出现的是奇数 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …
网站天天做收录有效果吗,软文营销定义,cpanel伪静态wordpress,html网站地图怎么做二叉树中的伪回文路径 主要是伪回文串的判定: 如果字符串是偶数、所有数字出现的次数必须是偶数。 如果是奇数,有且只有一种数字的出现的是奇数
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …
二叉树中的伪回文路径
主要是伪回文串的判定:
如果字符串是偶数、所有数字出现的次数必须是偶数。
如果是奇数,有且只有一种数字的出现的是奇数
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int ans = 0;vector<int> list;int pseudoPalindromicPaths (TreeNode* root) {dfs(root);return ans;}void dfs(TreeNode* root){if(!root){return;}list.push_back(root->val);if(!root->left && !root->right){ if(check(list)){ans++;}list.pop_back();return ;}dfs(root->left);dfs(root->right);list.pop_back();}bool check(vector<int> &list){int vis[10] = {0};for(int x:list){vis[x]++;}int cnt = 0;for(int i=1;i<=9;i++){cnt += vis[i]&1;}return (list.size()&1) == cnt ; }};
基本思想:
用二进制的数的1或0表示某个数的出现的次数的奇偶性。
如 0000 0100 表示2出现了一次。
如 0000 0110 表示2、1都出现了一次。
但是因为我们只关心奇偶性,而不关心具体出现的次数,所以当再次出现2
时,我们可以对应的1抹掉(如果原来是1的话)。
这个时候可以借助异或运算的开关效果。
0^1=1 0^0=0
0^1=1 1^1=0
在检查的时候,如果数位全为0,说明数字出现次数全为0,可以组成回文串。或者,如果只有仅有1位为1,也可以构成长度为奇数的回文串。
用n&(n-1)
就可以提取出倒数第二高位的1对应的十进制数。
也就是说:n&(n-1) == n-lowbit(n) == n-n&(-n)
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int ans = 0;int pseudoPalindromicPaths (TreeNode* root) {helper(root,0);return ans;}void helper(TreeNode* root,int temp){temp ^= (1<<root->val);if(!root->left && !root->right){if(temp==0 || (temp&(temp-1))==0 ){ //注意位运算的优先级ans++;}}if(root->left) helper(root->left,temp);if(root->right) helper(root->right,temp); }
};