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


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10596985.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.

    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 }
  • 相关阅读:
    基于NEO4J的高级检索功能
    Neo4j 3.5发布,在索引方面大幅增强
    Neo4j 全文检索
    主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析
    neo4j常用cypher语句
    Neo4j使用简单例子
    neo4j 初探
    neo4j 基本概念和Cypher语句总结
    NEO4J亿级数据全文索引构建优化
    自定义中文全文索引
  • 原文地址:https://www.cnblogs.com/strengthen/p/10596985.html
Copyright © 2020-2023  润新知