美文网首页
191. Number of 1 Bits

191. Number of 1 Bits

作者: okerivy | 来源:发表于2017-03-13 21:08 被阅读13次

    Swift 3.0

    //
    //  E_191_NumberOf1Bits.swift
    //  AlgorithmLeetCode
    //
    //  Created by okerivy on 2017/3/9.
    //  Copyright © 2017年 okerivy. All rights reserved.
    //  https://leetcode.com/problems/number-of-1-bits
    
    import Foundation
    
    
    
    // MARK: - 题目名称: 191. Number of 1 Bits
    
    /* MARK: - 所属类别:
     标签: Bit Manipulation
     
     相关题目:
      (E) Reverse Bits
      (E) Power of Two
      (M) Counting Bits
      (E) Binary Watch
      (E) Hamming Distance
     
     */
    
    /* MARK: - 题目英文:
     Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
     
     For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.
     
     */
    
    
    /* MARK: - 题目翻译:
     编写一个函数,它接收一个无符号整数并返回它二进制形式中 '1'的个数(也称为Hamming weight)。
     
     例如,整数 ‘11’ 的32位二进制表示形式为 00000000000000000000000000001011 ,所以函数应当返回3。
     
     */
    
    
    
    /* MARK: - 解题思路:
     考虑位运算
     
     设输入的数为n,把n与1做二进制的与&(AND)运算,即可判断它的最低位是否为1。
     如果是的话,把计数变量加一。然后把n向右移动一位,重复上述操作。
     当n变为0时,终止算法,输出结果。
     
    
     
     
     */
    
    
    /* MARK: - 复杂度分析:
      时间复杂度:O(n) 空间复杂度:O(1)
     
     */
    
    
    // MARK: - 代码:
    private class Solution {
        
        // 取模 整除
        func hammingWeight(_ n: UInt32) -> Int {
            
            // 传进来n为let类型 不能改变,所以搞个num变量
            var  num = n
            
            // 计数器
            var count = 0
            
            while num > 0 {
                // 把num与1做二进制的与(AND)运算,即可判断它的最低位是否为1
                if num & 1 == 1 {
                    count += 1
                }
                
                // 右移一位 相当于 / 2  public func >>=(lhs: inout UInt32, rhs: UInt32)
                num >>= 1
            }
        
            return count;
        }
    
        // 取模 整除
        func hammingWeight2(_ n: UInt32) -> Int {
            
            // 传进来n为let类型 不能改变,所以搞个num变量
            var  num = n
            
            // 计数器
            var count = 0
            
            while num > 0 {
                count += 1
                
                // x & (x - 1) 它会把整数x的二进制的最后一个1去掉。
                num &= (num - 1)
            }
            
            return count;
        }
        
    }
    
    
    
    // MARK: - 测试代码:
    func numberOf1Bits() {
        
        print(Solution().hammingWeight(0))
        print(Solution().hammingWeight(1))
        print(Solution().hammingWeight(2))
        print(Solution().hammingWeight(8))
        print(Solution().hammingWeight(11))
        print(Solution().hammingWeight(7))
    }
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:191. Number of 1 Bits

          本文链接:https://www.haomeiwen.com/subject/wkbwgttx.html