牛牛与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"; } };