[Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of
发布时间:2020-12-14 04:58:42 所属栏目:百科 来源:网络整理
导读: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
Starting with a positive integer? Return? 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:
从正整数? 如果我们可以通过上述方式得到?2 的幂,返回? 示例 1: 输入:1 输出:true 示例 2: 输入:10 输出:false 示例 3: 输入:16 输出:true 示例 4: 输入:24 输出:false 示例 5: 输入:46 输出:true? 提示:
Runtime:?8 ms
Memory Usage:?18.6 MB
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |