LeetCode 中级 - 重新排序得到的幂(105)

从正整数 N 开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false

示例 1:

输入:1
输出:true

思路:
  1. 如何判断一个值为2的幂

    我们知道,1个数乘以2就是将该数左移1位,而2的0次幂为1, 所以2的n次幂(就是2的0次幂n次乘以2)就是将1左移n位,

    这样我们知道如果一个数n是2的幂,则其只有首位为1,其后若干个0,必然有n & (n - 1)为0。

    因此采用(n&(n-1))来判断该值是否为2的幂。

  

class Solution {
public:
    bool reorderedPowerOf2(int N) {
         vector<int> a;
         int sum;
         while(N>0)
         {
             a.push_back(N%10);
             N=N/10;
         }
        sort(a.begin(),a.end());
        do
        {
               sum=0;
            if(a[0]==0)
                continue;
            else{
                for(int i=0;i<a.size();i++)
                  sum=sum*10+a[i];
                if((sum&sum-1)==0) return true;
            }
        }while(next_permutation(a.begin(),a.end()));
        return false;
    }
};

猜你喜欢

转载自www.cnblogs.com/-xinxin/p/10632810.html