LeetCode: 869. Reordered Power of 2

LeetCode: 869. Reordered Power of 2

题目描述

Starting with a positive integer N, we reorder the digits in any order (including the original order) such that the leading digit is not zero.

Return true if and only if we can do this in a way such that the resulting number is a power of 2.

Example 1:

Input: 1
Output: true

Example 2:

Input: 10
Output: false

Example 3:

Input: 16
Output: true

Example 4:

Input: 24
Output: false

Example 5:

Input: 46
Output: true

Note:

1 <= N <= 10^9

解题思路 —— 深度优先搜索

通过深度优先搜索遍历所有排列的可能性,然后将其转换为二进制数,如果转换的二进制数只有一个 1 则是二的倍数。

AC 代码

class Solution {
    bool dfs(string curNum, string& N)
    {
        if(curNum.size() == N.size())
        {
            int num = stoi(curNum);
            int cntOne = 0;
            while(num)
            {
                cntOne += num%2;
                num /= 2;
            }
            if(cntOne == 1) return true;
            else return false;
        }
        for(int i = 0; i < N.size(); ++i)
        {
            if(N[i] < 0) continue;
            if(curNum.size() == 0 && N[i] == '0') continue;

            curNum.push_back(N[i]);
            N[i] = -N[i];
            if(dfs(curNum, N) == true) return true;
            curNum.pop_back();
            N[i] = -N[i];
        }
        return false;
    }
public:
    bool reorderedPowerOf2(int N) {
        string strN = to_string(N);
        return dfs("", strN);
    }
};
全部评论

相关推荐

11-11 16:40
已编辑
门头沟学院 人工智能
不知道怎么取名字_:这个有点不合理了,相当于已经毕业了,但还是没转正,这不就是白嫖
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务