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
Runtime: 11 ms, faster than 52.38% of Java online submissions for Reordered Power of 2.
class Solution { private char[] Ncarr; public boolean ispermutation(String astr){ char[] acarr = astr.toCharArray(); Arrays.sort(acarr); for(int i=0; i<acarr.length; i++){ if(acarr[i] != Ncarr[i]) return false; } return true; } public boolean reorderedPowerOf2(int N) { if(N == 1 || N == 2) return true; String Nstr = Integer.toString(N); Ncarr = Nstr.toCharArray(); Arrays.sort(Ncarr); int digitN = Nstr.length(); int base = 2; List<String> tmplist = new ArrayList<>(); while(true){ String tmp = Integer.toString(base); if(tmp.length() == digitN) tmplist.add(tmp); if(((base >> 31) & 1) == 1) break; if(tmp.length() > digitN) break; base <<= 1; } for(String x : tmplist){ if(ispermutation(x)) return true; } return false; } }