文章目录
一,循环专练知识点总结:
二丶做题记录:
1.剑指 Offer 64. 求1+2+…+n
这道题在不按照题目要求的情况下有两种做法:
(1): 利用等差数列求和公式直接返回结果,代码如下:
int sumNums(int n)
{
return n*(n+1)/2;
}
(2):利用循环遍历累加 1 到 n 最后返回结果即可
int sumNums(int n)
{
int ans=0;
for(int i=1;i<=n;i++)
{
ans+=i;
}
return ans;
}
2.LeetCode: 231. 2 的幂
(1)对于一个数字来说,如果他是2的幂次方那么首先他应该大于0并且在这个数的二进制位中就只存在一个 1
如:
1=2^0 , 2=10(2)=2^1 , 4=100(2)=2^2 ,
8=1000(2)=2^3;
(2)那么接下来的思路就很简单了,利用循环统计n的二进制中1的个数如果为1返回true,否则false;
这是一种求取n的二进制位中1的个数的方法:
bool isPowerOfTwo(int n){
if(n<0)
return false;
int cnt=0;
for(int i=0;i<=31;i++)
{
cnt+=((n>>i)&1);
}
return cnt==1;
}
第二种是:
bool isPowerOfTwo(int n){
if(n<0)
return false;
int cnt=0;
while(n)
{
n&=(n-1);
cnt++;
}
return cnt==1;
}
两种代码均可通过
3.LeetCode:326. 3 的幂
(1)同样的对于一个数n,他如果是3的幂次方那么他首先要大于0,并且在他的三进制中只有一个1;
(2)现在我们吧进行枚举,即使从1开始每次让 1 *= 3,如果中途出现等于n的情况,返回true,否则false;
bool isPowerOfThree(int n){
if(n<0)
return false;
unsigned int num=1;
for(int i=1;i<=23;i++)
{
if(num==n)
return true;
num*=3;
}
return false;
}
4.LeetCode:342. 4的幂
做法和3的幂次一样,不再详细赘述。
bool isPowerOfFour(int n){
if(n<=0)
return false;
unsigned int num=1;
for(int i=1;i<=16;i++)
{
if(num==n)
return true;
num*=4;
}
return false;
}
5.LeetCode:1492. n 的第 k 个因子
1):这个题的思路十分简单,从1到n进行试除法,来枚举n的因子,并在过程中进行计数,如果是第k个因子返回即可,否则返回-1
2):这个做法的不用进行题目中的排序,因为我们的枚举是按照升序来进行的。
int kthFactor(int n, int k){
int cnt=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
cnt++;
if(cnt==k)
return i;
}
}
return -1;
}
6、LeetCode: 367. 有效的完全平方数
首先对于正整数num应大于0,接着同样进行枚举即可,当 i * i >=num 返回false,途中遇到相等返回true(为了避免算术溢出吧i定义为longlong类型)
bool isPerfectSquare(int num){
bool isPerfectSquare(int num){
if(num<0)
return false;
long long i = 1;
while(1)
{
if(i*i ==num)
return true;
if(i*i >num)
return false;
i++;
}
return false;
}