0
点赞
收藏
分享

微信扫一扫

[学习报告]《LeetCode零基础指南》(第2讲)循环

开源分享 2022-04-04 阅读 46
c语言

文章目录

一,循环专练知识点总结:

二丶做题记录:

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

这道题在不按照题目要求的情况下有两种做法:
  (1): 利用等差数列求和公式直接返回结果,代码如下:

int sumNums(int n)
{
    return n*(n+1)/2;
}

  (2):利用循环遍历累加 1n 最后返回结果即可

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

在这里插入图片描述

三丶今日收获

举报

相关推荐

0 条评论