九日集训day2【刷题】【九日集训】
前言🐱
hello,今天是九日集训的第二天,现在的题都是以过了为目的,以后会回来再刷的!
加油!!!
剑指 Offer 64. 求1+2+…+n
利用递归即可。
class Solution {public: int sumNums(int n) { if(n == 1) return 1; return n + sumNums(n-1); }};
231. 2 的幂
位运算
注意题目要求的是负数必定不可能是2的幂
class Solution {public: bool isPowerOfTwo(int n) { if(n < 0) return false; for(int i = 0; i < 32; i++) { if(((unsigned int)1 << i) == n) return true; } return false; }};
位运算2
利用 n&(n-1) == 0 判断是否为2的倍数
注意== 优先级比 & 优先级高,需要先加上括号
class Solution {public: bool isPowerOfTwo(int n) { if(n <= 0) return false; if((n&(n-1)) == 0) return true; return false; }};
通用解法:
注意《= 0 和 1要单独考虑
class Solution {public: bool isPowerOfTwo(int n) { if(n <= 0) return false; if(n == 1) return true; unsigned int sum = 1; for(int i = 1; i <= 32; i++) { sum *= 2; if(sum == n) return true; } return false; }};
326. 3 的幂
class Solution {public: bool isPowerOfThree(int n) { if(n <= 0) return false; if(n == 1) return true; unsigned int sum = 1; for(int i = 1; i <= 32; i++) { sum *= 3; if(sum == n) return true; } return false; }};
其实3^21 应该就超过了 int 的上限 2^31 所以 改成i <= 20也行
342. 4的幂
其实4^16 应该就超过了 int 的上限 2^31,所以 改成i <= 15也行
1492. n 的第 k 个因子
利用count计数表示因子i的个数,并借此和k比较
class Solution {public: int kthFactor(int n, int k) { //因子i一定是在1~n范围内的 int i = 1; //利用count计数表示因子i的个数,并借此和k比较 int count = 0; for(int i = 1; i <= n; i++) { if(n % i == 0) count++; if(count == k) return i; } //因子数少于k,返回-1 return -1; }};
367. 有效的完全平方数
class Solution {public: bool isPerfectSquare(int num) { //暴力遍历所有的数 for(long long i = 1; ; i++) { long long ret = i*i; if(ret == num) return true; if(ret > num) return false; } }};