- 阶乘后的零
int trailingZeroes(int n) {
int five = 0;
while(n >= 5){
five += n/5;
n/=5;
}
return five;
}
- 将数字变成 0 的操作次数
int numberOfSteps(int num) {
int res = num == 0 ? 1 : 0;
while (num > 0)
{
res += 1 + (num % 2);
num /= 2;
}
// 为什么要除以1,因为对于1情况会加2,所以额外要减1
return res - 1;
}
3.完全二叉树的节点个数
int countNodes(TreeNode* root) {
level = get_level(0, root);
if(level<2) return level;
int l=0,r=(1<<(level-1))-1;
while(l<r)
{
int mid = ((l+r)>>1)+1;
if(get_level(reverse(mid), root)==level)l=mid;
else r=mid-1;
}
return (1<<(level-1))+l;
}
int reverse(int x)
{
int y=0;
for(int i=0;i<level-1;i++)
if(x&(1<<i)) y |= 1<<(level-i-2);
return y;
}
int get_level(int l, TreeNode* p)
{
if(!p) return 0;
if(l&1) return get_level(l>>1, p->right)+1;
else return get_level(l>>1, p->left)+1;
}
- 开幕式焰火
int numColor(TreeNode* root) {
unordered_set<int> setColor;
getColor(root,setColor);
return setColor.size();
}
void getColor(TreeNode* root,unordered_set<int>& setColor)
{
if(root == nullptr)
return;
setColor.insert(root->val);
getColor(root->left,setColor);
getColor(root->right,setColor);
}