• [Swift]LeetCode693. 交替位二进制数 | Binary Number with Alternating Bits


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10502442.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

    Example 1:

    Input: 5
    Output: True
    Explanation:
    The binary representation of 5 is: 101 

    Example 2:

    Input: 7
    Output: False
    Explanation:
    The binary representation of 7 is: 111. 

    Example 3:

    Input: 11
    Output: False
    Explanation:
    The binary representation of 11 is: 1011. 

    Example 4:

    Input: 10
    Output: True
    Explanation:
    The binary representation of 10 is: 1010.

    给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。

    示例 1:

    输入: 5
    输出: True
    解释:
    5的二进制数是: 101
    

    示例 2:

    输入: 7
    输出: False
    解释:
    7的二进制数是: 111
    

    示例 3:

    输入: 11
    输出: False
    解释:
    11的二进制数是: 1011
    

     示例 4:

    输入: 10
    输出: True
    解释:
    10的二进制数是: 1010

    Runtime: 4 ms
    Memory Usage: 18.4 MB
    1 class Solution {
    2     func hasAlternatingBits(_ n: Int) -> Bool {
    3         return ((n + (n >> 1) + 1) & (n + (n >> 1))) == 0
    4     }
    5 }

    4ms

     1 class Solution {
     2     func hasAlternatingBits(_ n: Int) -> Bool {
     3         
     4         var current = n % 2
     5         var n = n / 2
     6         while n > 0 {
     7             if current == n % 2 {
     8                 return false
     9             }
    10             current = n % 2
    11             n = n / 2
    12         }
    13         return true
    14     }
    15 }

    12ms

     1 class Solution {
     2     func hasAlternatingBits(_ n: Int) -> Bool {
     3         let binaryString = String(n, radix: 2)
     4         let count = binaryString.count
     5         var i = 0
     6         var flag = -1
     7         while i < binaryString.count {
     8             if flag != -1 {
     9                 guard flag != (n>>i) & 1 else {
    10                     return false
    11                 }
    12             }
    13             flag = (n>>i) & 1
    14             i += 1
    15         }
    16         return true        
    17     }
    18 }

    12ms

     1 class Solution {
     2     func hasAlternatingBits(_ n: Int) -> Bool {
     3         let str = String(n,radix:2)
     4         let characters = Array(str)
     5         var result = true
     6         for i in 0..<characters.count {
     7             if i+1 < characters.count {
     8                 if characters[i] == characters[i+1] {
     9                     result = false
    10                 }
    11             }
    12         }
    13         return result
    14     }
    15 }

    24ms

     1 class Solution {
     2     func hasAlternatingBits(_ n: Int) -> Bool {
     3         var n = n
     4         var bit0 = n & 1
     5         n >>= 1
     6         while n > 0 {
     7             if n & 1 != bit0 {
     8                 bit0 = n & 1
     9                 n >>= 1
    10                 continue
    11             } else {
    12                 return false
    13             }
    14         }
    15         return true
    16     }
    17 }

    28ms

     1 class Solution {
     2     func hasAlternatingBits(_ n: Int) -> Bool {
     3        let str = toBinary(n)
     4         for i in 0 ..< str.count - 1 {
     5             let index1 = str.index(str.startIndex, offsetBy: i)
     6             let index2 = str.index(str.startIndex, offsetBy: i + 1)
     7             let c = str[index1 ..< index2]
     8             let index3 = str.index(str.startIndex, offsetBy: i + 2)
     9             let c1 = str[index2 ..< index3]
    10             if String(c) == String(c1) {
    11                 return false
    12             }
    13         }
    14         return true
    15     }
    16     
    17     func toBinary(_ n: Int) -> String {
    18         var m = n
    19         var str = ""
    20         while m > 0 {
    21             let temp = m % 2
    22             str = "(temp)" + str
    23             m /= 2
    24         }
    25         return str
    26     }
    27 }
  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/strengthen/p/10502442.html
Copyright © 2020-2023  润新知