题目:
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。 如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1 输出:true
示例 2:
输入:10 输出:false
示例 3:
输入:16 输出:true
示例 4:
输入:24 输出:false
示例 5:
输入:46 输出:true
提示
1 <= N <= 10^9
class Solution { public boolean reorderedPowerOf2(int n) { int num = 1; Set<String> set = new HashSet<>(); set.add("1"); // 判断是否溢出 while (num == num << 1 >> 1) { num = num << 1; set.add(intSort2String(num)); } return set.contains(intSort2String(n)); } /** * 将数字从大到小排序再转成字符串 * * @param num * @return */ private String intSort2String(int num) { char[] nums = String.valueOf(num).toCharArray(); for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length - 1 - i; j++) { if (nums[j] < nums[j + 1]) { char t = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = t; } } } return String.valueOf(nums); } }