前言🐱
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. 有效的完全平方数
暴力遍历所有的数,直到找到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;
}
}
};