zoukankan      html  css  js  c++  java
  • [LeetCode] 476. Number Complement

    Given a positive integer num, output its complement number. The complement strategy is to flip the bits of its binary representation.

    Example 1:

    Input: 5
    Output: 2
    Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

    Example 2:

    Input: 1
    Output: 0
    Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

    数字的补数。题意是给一个正整数,请你返回他的二进制的补数。为什么要标红正整数,是因为这道题跟1009题还是有点区别的。1009的条件是非负整数,如果还是用这道题的办法,遇到0会报错,因为0的补数是1。

    既然是找二进制的补数,自然是位运算了。因为求的是补数,所以原来是1的digit要变成0,原来0的地方要变成1,所以思路就是找一个数字,每次不断向左移动一位,并和1做与的操作(“|”)。因为sum一开始是0,所以每一位与1的结果都是1。但是这个题巧妙的地方在于,补数 = 若干个1 - 原来的数。例子,比如原来的数字是6好了,二进制是110。他的补数1(001)= 111 - 110。这不是一个巧合,所有的数字都满足这个条件。

    时间O(1)

    空间O(1)

    Java实现

    1 class Solution {
    2     public int findComplement(int num) {
    3         int sum = 0;
    4         while (sum < num) {
    5             sum = (sum << 1) | 1;
    6         }
    7         return sum - num;
    8     }
    9 }

    LeetCode 题目总结

  • 相关阅读:
    Linux终端基本命令
    Markdown基本语法
    谷歌浏览器解决”此Flash Player与您的地区不相容“
    谷歌浏览器不可以默认允许flash的解决方法
    MySQL8.0登陆方式
    谷歌浏览器安装位置自定义
    java生成六位验证码
    对AJAX的理解
    对servlet请求的理解
    js60秒倒计时
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12830251.html
Copyright © 2011-2022 走看看