在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given a positive integer n, find the number of non-negativeintegers less than or equal to n, whose binary representations do NOT contain consecutive ones. Example 1: Input: 5 Output: 5 Explanation: Here are the non-negative integers <= 5 with their corresponding binary representations: 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101 Among them, only integer 3 disobeys the rule (two consecutive ones) and the other 5 satisfy the rule. Note: 1 <= n <= 10^9 给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数。 示例 1: 输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数<= 5: 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101 其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。 说明: 1 <= n <= 10^9 Runtime: 8 ms
Memory Usage: 18.5 MB
1 class Solution { 2 func findIntegers(_ num: Int) -> Int { 3 var res:Int = 0 4 var k:Int = 31 5 var pre:Int = 0 6 var f:[Int] = [Int](repeating:0,count:32) 7 f[0] = 1 8 f[1] = 2 9 for i in 2..<31 10 { 11 f[i] = f[i - 2] + f[i - 1] 12 } 13 while (k >= 0) 14 { 15 if num & (1 << k) != 0 16 { 17 res += f[k] 18 if pre != 0 19 { 20 return res 21 } 22 pre = 1 23 } 24 else 25 { 26 pre = 0 27 } 28 k -= 1 29 } 30 return res + 1 31 } 32 }
|
请发表评论