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);
    }
};

猜你喜欢

转载自blog.csdn.net/yanglingwell/article/details/81051282
今日推荐