做网站好的框架,嵌入式软件开发培训班,如何建设大型电子商务网站,中山企业网站1. 题目
给定正整数 N #xff0c;我们按任何顺序#xff08;包括原始顺序#xff09;将数字重新排序#xff0c;注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂#xff0c;返回 true#xff1b;否则#xff0c;返回 false。
示例 1#xff1a;
输入…1. 题目
给定正整数 N 我们按任何顺序包括原始顺序将数字重新排序注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂返回 true否则返回 false。
示例 1
输入1
输出true示例 2
输入10
输出false示例 3
输入16
输出true示例 4
输入24
输出false示例 5
输入46
输出true提示
1 N 10^9来源力扣LeetCode 链接https://leetcode-cn.com/problems/reordered-power-of-2 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 解题
2.1 排序
将数字转成字符串并排序枚举32位的所有2的次幂的数转字符串并排序跟上面字符串比较即可
class Solution {
public:bool reorderedPowerOf2(int N) {string origin(to_string(N));string powerTwo;sort(origin.begin(), origin.end());for(int i 0; i 32; i){powerTwo to_string(1i);sort(powerTwo.begin(), powerTwo.end());if(powerTwo origin)return true;}return false;}
};2.2 全排列
class Solution {bool ans false;
public:bool reorderedPowerOf2(int N) {string origin(to_string(N));bt(origin,0);return ans;}void bt(string str, int i){if(ans true || i str.size())return;for(int j i; j str.size(); j){swap(str[i],str[j]);if(str[0]!0 isPowerTwo(stoi(str)))ans true;bt(str,i1);swap(str[i],str[j]);}}bool isPowerTwo(int n){return (n(n-1)) 0;}
};