牛牛与2的幂次方(2)题解

牛牛与2的幂次方(2)

https://www.nowcoder.com/questionTerminal/a7dfb5c1191b4ff3b090f2858851302f

牛牛特别喜欢数字7,他想知道,一个数减去7后是否刚好是2的幂次方,不过他不知道该怎么做,所以他想请你帮忙。
给定一个数字n,如果该数减去7后是2的幂次方,返回"YES",否则,返回"NO"。

题解:判断一个数是否是2的幂次方有很多种方法,可以直接模拟做,只不过使用模拟做的方式,要考虑减去7后出现负数的情况。参考代码中是采用位运算的方式,如果 n 是 2 的幂次方的话,那么 n 的二进制数的最高位是 1,后面的都是 0。如果我们把它减 1,则最高位变成 0,其余全部变成 1。然后我们 n &(n - 1),结果就会是 0。例如:16=10000,(10000 & 0 1111)=0。

时间复杂度:图片说明
空间复杂度:图片说明
参考代码如下:

class Solution {
public:
    /**
     * 给定一个数字n,如果该数减去7后是2的幂次方,返回"YES",否则,返回"NO"。
     * @param n int整型 代表题目中的n
     * @return string字符串
     */
    string solve(int n) {
        // write code here
        int x = n - 7;
        return (x & (x - 1)) == 0 ? "YES" : "NO";
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务