加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[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?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: 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:

  1. 1 <= N <= 10^9

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

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

示例 1:

输入:1
输出:true

示例 2:

输入:10
输出:false

示例 3:

输入:16
输出:true

示例 4:

输入:24
输出:false

示例 5:

输入:46
输出:true?

提示:

  1. 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 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 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读