> 文档中心 > 九日集训day2【刷题】【九日集训】

九日集训day2【刷题】【九日集训】


前言🐱

hello,今天是九日集训的第二天,现在的题都是以过了为目的,以后会回来再刷的!
加油!!!
九日集训day2【刷题】【九日集训】

剑指 Offer 64. 求1+2+…+n

九日集训day2【刷题】【九日集训】

利用递归即可。

class Solution {public:    int sumNums(int n) { if(n == 1)     return 1; return n + sumNums(n-1);    }};

九日集训day2【刷题】【九日集训】

231. 2 的幂

位运算

注意题目要求的是负数必定不可能是2的幂

九日集训day2【刷题】【九日集训】

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;    }};

九日集训day2【刷题】【九日集训】

位运算2

利用 n&(n-1) == 0 判断是否为2的倍数

注意== 优先级比 & 优先级高,需要先加上括号

九日集训day2【刷题】【九日集训】

class Solution {public:    bool isPowerOfTwo(int n) { if(n <= 0)     return false; if((n&(n-1)) == 0)     return true; return false;    }};

九日集训day2【刷题】【九日集训】

通用解法:

注意《= 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;    }};

九日集训day2【刷题】【九日集训】

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;    }};

九日集训day2【刷题】【九日集训】

其实3^21 应该就超过了 int 的上限 2^31 所以 改成i <= 20也行

342. 4的幂

九日集训day2【刷题】【九日集训】

其实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;    }};

九日集训day2【刷题】【九日集训】

367. 有效的完全平方数

暴力遍历有的数,直到找到num的完全平方数或找不到。

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; }    }};

九日集训day2【刷题】【九日集训】