第五届字节跳动青训营编程题样题的6种以上解法

描述

输入一个表示整数的字符串,判断这个字符串是否是4的幂。

输入

一个正整数字符串

输出

返回true或false

https://oj.juejin.cn/problem/04

如果我下面写的不清楚,可以直接参考力扣官方题解

https://leetcode.cn/problems/power-of-four/solution/4de-mi-by-leetcode-solution-b3ya/

方法一:4的幂

如果是4的幂,

首先,n%4 == 0

其次,n一直/4最后会==1,否则就是false

function isPowerOfFour(n) {
    if (n > 0 && n % 4 == 0) {
        while (n > 0) {
            n = n / 4
            if (n == 1) return true
            if (n == 0) return false
        }
    } else {
        return false
    }
}

方法二:2的幂

是4的幂首先是2的幂

首先,n&(n-1) == 0且n>0

其次,如果在这个基础上还是4的幂的话,满足n%3==1

function isPowerOfFour(n) {
    return (n & (n - 1)) == 0 && n > 0 && n % 3 == 1
}

方法三:利用二进制标识数

因为

4二进制 :100

16二进制:10000

64二进制:1000000

所以所有4的幂,1都在奇数位,那么和0xaaaaaaaa=10101010101010101010101010101010相与一定是0

function isPowerOfFour(n) {
    return (n & (n - 1)) == 0 && n > 0 && (n & 0xaaaaaaaa) == 0
}

拓展阅读

一些常用的二进制数

0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0)

0x55555555 = 1010101010101010101010101010101 (偶数位为0,奇数位为1)

0x33333333 = 110011001100110011001100110011 (1和0每隔两位交替出现)

0xcccccccc = 11001100110011001100110011001100 (0和1每隔两位交替出现)

0x0f0f0f0f = 00001111000011110000111100001111 (1和0每隔四位交替出现)

0xf0f0f0f0 = 11110000111100001111000011110000 (0和1每隔四位交替出现)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林杰Jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值