★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-yujqtakx-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
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.git
Return true
if and only if we can do this in a way such that the resulting number is a power of 2. github
Example 1:微信
Input: 1
Output: true
Example 2:app
Input: 10
Output: false
Example 3:this
Input: 16
Output: true
Example 4:spa
Input: 24
Output: false
Example 5:code
Input: 46
Output: true
Note:htm
1 <= N <= 10^9
從正整數 N
開始,咱們按任何順序(包括原始順序)將數字從新排序,注意其前導數字不能爲零。blog
若是咱們能夠經過上述方式獲得 2 的冪,返回 true
;不然,返回 false
。
示例 1:
輸入:1 輸出:true
示例 2:
輸入:10 輸出:false
示例 3:
輸入:16 輸出:true
示例 4:
輸入:24 輸出:false
示例 5:
輸入:46 輸出:true
提示:
1 <= N <= 10^9
1 class Solution { 2 func reorderedPowerOf2(_ N: Int) -> Bool { 3 var c:Int = counter(N) 4 for i in 0..<32 5 { 6 if counter(1 << i) == c 7 { 8 return true 9 } 10 } 11 return false 12 } 13 14 func counter(_ N:Int) ->Int 15 { 16 var N = N 17 var res:Int = 0 18 while(N > 0) 19 { 20 res += Int(pow(10, Double(N % 10))) 21 N /= 10 22 } 23 return res 24 } 25 }
12ms
1 class Solution { 2 func reorderedPowerOf2(_ N: Int) -> Bool { 3 let a = count(N); 4 for i in 0...31 { 5 if a.elementsEqual(count(1 << i)) { 6 return true; 7 } 8 } 9 return false; 10 } 11 12 func count(_ N: Int) -> [Int] { 13 var n = N 14 var ans = [Int](repeating: 0, count: 31) 15 while (n > 0) { 16 let indx = n % 10; 17 ans[indx] = ans[indx] + 1; 18 n /= 10; 19 } 20 return ans 21 } 22 }
16ms
1 class Solution { 2 3 let pows2 = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912] 4 var dictArr = [Int: [[Character: Int]]]() 5 6 init() { 7 for n in pows2 { 8 let s = String(n) 9 let val = toStringDict(n) 10 if let arr = dictArr[s.count] { 11 var varArr = arr 12 varArr.append(val) 13 dictArr[s.count] = varArr 14 } else { 15 dictArr[s.count] = [val] 16 } 17 } 18 } 19 20 func reorderedPowerOf2(_ N: Int) -> Bool { 21 return dictArr[String(N).count]?.contains(toStringDict(N)) ?? false 22 } 23 24 func toStringDict(_ n: Int) -> [Character : Int] { 25 let s = String(n) 26 var dict: [Character : Int] = [:] 27 for char in s.characters { 28 if let val = dict[char] { 29 dict[char] = val + 1 30 } else { 31 dict[char] = 1 32 } 33 } 34 return dict 35 } 36 }
28ms
1 class Solution { 2 func reorderedPowerOf2(_ N: Int) -> Bool { 3 if N == 1 {return true} 4 var set = [String]() 5 let stirng = String("\(N)".sorted(by: >)) 6 let max = Int(stirng)! 7 for i in 1... { 8 let number = 1 << i 9 if number > max {break} 10 set.append(String("\(number)".sorted(by: >))) 11 } 12 return set.contains(stirng) 13 } 14 }