[Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2

[Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2,第1张

概述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 t

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: 1Output: true 

Example 2:

input: 10Output: false 

Example 3:

input: 16Output: @H_502_37@true 

Example 4:

input: 24Output: false 

Example 5:

input: 46Output: true 

Note:

1 <= N <= 10^9

从正整数 N 开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。 

示例 1:

输入:1输出:true

示例 2:

输入:10输出:false

示例 3:

输入:16输出:true

示例 4:

输入:24输出:false

示例 5:

输入:46输出:true 

提示:

1 <= N <= 10^9 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 false12     }13 14     func counter(_ N:Int) ->Int15     {16         var N = N17         var res:Int = 018         while(N > 0)19         {20             res += Int(pow(10,Double(N % 10)))21             N /= 1022         }23         return res24     }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 = N14         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 ans21     }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 = arr12                 vararr.append(val)13                 dictArr[s.count] = vararr14             } 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)) ?? false22     }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 + 130             } else {31                 dict[char] = 132             }33         }34         return dict35     }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 }
总结

以上是内存溢出为你收集整理的[Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2全部内容,希望文章能够帮你解决[Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1017454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存