重新排序得到 2 的幂
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
class Solution {
public boolean reorderedPowerOf2(int N) {
String S = Integer.toString(N);
int[] A = new int[S.length()];
for (int i = 0; i < S.length(); ++i) {
A[i] = S.charAt(i) - '0';
}
return permutations(A, 0);
}
public boolean isPowerOfTwo(int[] A) {
if (A[0] == 0) {
return false;
}
int N = 0;
for (int x : A) {
N = 10 * N + x;
}
return (N & (N-1))==0;
}
public boolean permutations(int[] A, int start) {
if (start == A.length) {
return isPowerOfTwo(A);
}
for (int i = start; i < A.length; ++i) {
swap(A, start, i);
if (permutations(A, start + 1)) {
return true;
}
swap(A, start, i);
}
return false;
}
public void swap(int[] A, int i, int j) {
int t = A[i];
A[i] = A[j];
A[j] = t;
}
}