链接:869. 重新排序得到 2 的幂
题解:
class Solution {
public:
bool reorderedPowerOf2(int n) {
std::string str = std::to_string(n);
sort(str.begin(), str.end());
int begin = 0;
std::vector visited(str.size(), false);
std::vector path;
int sum = 0;
return dfs(begin, str, path, visited, sum);
}
bool dfs(int begin, const std::string& str, std::vector& path, std::vector& visited, int sum) {
if (begin >= str.size()) {
return two(sum);
}
for (int i = 0; i < str.size(); ++i) {
//cout << str[i] << endl;
if (begin == 0 && str[i] == '0') {
continue;
}
if (visited[i]) {
continue;
}
if (i-1 >= 0 && !visited[i-1] && str[i] == str[i-1]) {
continue;
}
visited[i] = true;
path.push_back(str[i]);
if (dfs(begin+1, str, path, visited, sum*10 + (str[i]-'0'))) {
return true;
}
path.pop_back();
visited[i] = false;
}
return false;
}
private:
bool two(int n) {
if (n == 1) {
return true;
}
return (n&(n-1)) == 0 ? true : false;
}
};



