/**
1499 · Reordered Power of 2
Algorithms
Medium
Accepted Rate
62%
DescriptionSolutionNotesDiscussLeaderboard
Description
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.
If we can get a power of 2 in the above way, we return true; otherwise, return false.
1 \leq N \leq 10^91≤N≤10
9
Example
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
Tags
https://blog.youkuaiyun.com/fuxuemingzhu/article/details/82468653
https://www.cnblogs.com/rubylouvre/p/12175524.html
https://blog.youkuaiyun.com/qq_28612967/article/details/98633126
https://www.lintcode.com/problem/1499/
*/
import (
"fmt"
"reflect"
)
/**
* @param N:
* @return: return true or false
*/
func reorderedPowerOf2 (N int) bool {
// write your code here
var c map[int]int = count(N)
var i uint32 = 0
for i = 0; i < 32; i++ {
var c1 map[int]int = count(1 << i)
if reflect.DeepEqual(c, c1) {
return true
}
}
return false
}
func count(N int) map[int]int {
c := make(map[int]int)
for i := 0; i <= 9; i++ {
c[i] = 0
}
for {
if N == 0 {
break
}
c[N % 10] = c[N % 10] + 1
N /= 10
}
return c
}
func main() {
var r1 bool = reorderedPowerOf2(16)
//true
fmt.Println(r1)
}