• leetcode 1017. 负二进制转换


    题意:

    给出数字 N,返回由若干 "0" 和 "1"组成的字符串,该字符串为 N 的负二进制(base -2)表示。

    除非字符串就是 "0",否则返回的字符串中不能含有前导零。

    示例 1:

    输入:2

    输出:"110"

    解释:(-2) ^ 2 + (-2) ^ 1 = 2

    示例 2:

    输入:3

    输出:"111"

    解释:(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3

    示例 3:

    输入:4

    输出:"100"

    解释:(-2) ^ 2 = 4

    提示:

    0 <= N <= 10^9

    思路:

    这是一个数学问题,我们知道如果是转为二进制的话,就是不断取摸。如果对于转为负二进制采用同样的思路,我们的余数会出现负数,这要怎么办?

    假设a / b = c....d,那么c * b + d = a,即c * b + b - b + d = a,(c+1)*b + (d - b) = a,所以当余数为负数时,我们让商加一,余数减去除数(这里为-2),就可以得到每一位上的值

     1 const int maxn=1e9;
     2 class Solution {
     3 public:
     4     string baseNeg2(int N) {
     5         if(N==0)return "0";
     6         string s="";
     7         while(N){
     8             int k=N%(-2);
     9             N/=-2;
    10             if(k<0)N++,k+=2;
    11             s+=('0'+k);
    12         }
    13         reverse(s.begin(),s.end());
    14         return s;
    15     }
    16 };
    View Code
  • 相关阅读:
    Hammer.js--转载自李林峰的园子
    nodejs--模块
    gruntjs
    玩转github----1
    模块化开发--sea.js
    事件委托
    css兼容问题
    轮播图
    Spring整合Hibernate 二
    Spring整合Hibernate 一
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/11761254.html
Copyright © 2020-2023  润新知