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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)