inttrailingZeroes(int n){ int times = 0; for (int i = 5; i <= n; i += 5) { int count = i; while (count && count % 5 == 0) { times ++; count /= 5; } } return times; }
leetcode201 数字范围按位与
给你两个整数 left 和 right ,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。
题解
相邻两个数相与,末尾的 0
将会被消除,通过移位找公共前缀得到区间相与结果
1 2 3 4 5 6 7 8 9 10
intrangeBitwiseAnd(int left, int right){ int shift = 0; // 找到公共前缀 while (left < right) { left >>= 1; right >>= 1; ++shift; } return left << shift; }
classSolution { public: vector<int> productExceptSelf(vector<int>& nums){ vector<int> ret(nums.size()); int mul = nums[0]; ret[0] = 1; for (int i = 1; i < nums.size(); i ++) { ret[i] = mul; mul *= nums[i]; } mul = nums[nums.size() - 1]; for (int i = nums.size() - 2; i >= 0; i --) { ret[i] *= mul; mul *= nums[i]; } return ret; } };
leetcode69 x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5
。
intsingleNumber(vector<int>& nums){ int ret = 0; for (int i = 0; i < 32; i ++) { int count = 0; for (auto n : nums) { count += n >> i & 1; } if (count % 3) ret += 1 << i; } return ret; }