文章目录
文章目录
今日知识总结
- 循环:循环初始表达式,循环条件表达式,循环执行表达式
- 初始表达式:初始化表达式外置,初始化表达式内置
- 条件表达式:表明结束循环的条件
- 执行表达式:让循环逐渐不成立,可以省略,代码块里本身也可以加上此功能
题目分析
-
num剑指 Offer 64. 求1+2+…+n
-
思路: 根据题目要求很容易就可以想到递归的方式,但是递归的时候我们也会用到逻辑运算符,怎么样来规避逻辑运算符的应用呢,可以运用到逻辑运算符的短路性质,比如说||运算符,如果前面为true,我们就可以直接返回true,不必再判断下一个条件了,那么同理,这道题可以用&&进行判断
-
代码
class Solution { public: int sumNums(int n) { n && (n += sumNums(n - 1)); return n; } };
-
num231. 2 的幂
-
题目链接:(https://leetcode-cn.com/problems/power-of-two/)
-
思路:找出i = 0开始计算2i次幂,知道2^i >= n 为止
-
代码:
long long pow(int n){ long long ans = 1; int old = n; long long a = 2; while(old){ if(old % 2 == 1) ans *= a; old /= 2; a *= a; } return ans; } class Solution { public: bool isPowerOfTwo(int n) { if(n == 1) return true; for(int i = 0; i < n; i ++){ if(n == pow(i)) return true; else if(n < pow(i)) return false; } // cout << pow(5); return false; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/power-of-three/
-
思路:试除法,将
n % 3
,如果等于0,就将n / 3
,如果有余数,就可以直接返回false -
代码:
class Solution { public: bool isPowerOfThree(int n) { while(n && (n % 3 == 0)){ n /= 3; } return n == 1; } };
-
-
num342. 4的幂
-
题目链接:https://leetcode-cn.com/problems/power-of-four/
-
思路:从1开始不断乘4,与n比较,如果这个数> n仍然没有返回true,则返回false,注意1要进行特殊判断
-
代码
class Solution { public: bool isPowerOfFour(int n) { if(n <= 0) return false; if(n == 1) return true; long long a = 1; while(a <= n){ a *= 4; if(a == n) return true; } return false; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/the-kth-factor-of-n/
-
思路:求因数,遍历一遍与i 取模即可,
-
代码:
class Solution { public: int kthFactor(int n, int k) { // map<int, int> a; // int max = 1; // for(int i = 1; i <= n; i++){ // if(n % i == 0) { // a[max] = i; // max++; // } // } // cout << max; // if(max - 1 < k) return -1; // else return a[k]; int cnt = 0; for(int i = 1; i <= n; i++){ if(n % i == 0){ cnt++; if(cnt == k) return i; } } return -1; } };
-
-
-
题目链接:https://leetcode-cn.com/problems/valid-perfect-square/
-
思路:
- 列出找出比num小的数的平方
- 1 = 1; 4 = 1 + 3; 9 = 1 + 3 + 5; 16 = 1 + 3 + 5 + 7 + 9;
- 由此可知,只要不断减去奇数,知道n <= 0
-
代码:
-
class Solution { public: bool isPerfectSquare(int num) { long long i = 0; while(i <= num){ if(i > num) break; if(i * i == num) return true; i++; } return false; } }; //这个在超时边缘徘徊,尽量不考虑 class Solution { public: bool isPerfectSquare(int num) { int i = 1; while(num > 0){ num -= i; i += 2; } return num == 0; } };
-
今日收获:
- 逻辑运算符的短路性质
- 完全平方数的规律
今日疑问:
- 有些地方感觉可以使用二分查找,感觉可以拿来练一下,二的幂之类的,等练习二分时候,感觉可以回头做一下