carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode367:有效的完全平方数(valid-perfect-square) #85

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。 进阶:不要 使用任何内置的库函数,如  sqrt 。

示例 1: 输入:num = 16 输出:true

示例 2: 输入:num = 14 输出:false  

提示: 1 <= num <= 2^31 - 1 通过次数199,699提交次数445,257

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-perfect-square

carloscn commented 1 year ago

问题分析

2的平方数在二进制的表现是: 1 : 1 2: 10 4: 100 8: 1000 ... 1024: 100 0000 0000

只有一个1,所以判断只有一个1即可。

static int32_t is_square(int64_t e)
{
    size_t count = 0;
    size_t len = sizeof(int64_t) * 8;

    while (-- len) {
        count += (e >> len) & 0x1U;
        if (count > 1) {
            return false;
        }
    }

    return true;
}
carloscn commented 1 year ago

code:

https://github.com/carloscn/structstudy/blob/master/c_programming/common/12_valid-perfect-square_367.c

result:

image