leetcode第130周赛——负二进制转换 C++

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/88931303

给出数字 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

提示:

  1. 0 <= N <= 10^9

其实负二进制和正二进制求解的过程很相似,无非就是将被除数由2换成了-2,还有最关键的一步,正二进制中的n=n/2换成了n=(n-a)/(-2),其中a代表的是abs(n%(-2))

class Solution {
public:
    string baseNeg2(int N) {
        stack<int> s;
        int n=N;
        string str1;
        if(n==0){
            return "0";
        }
        while(n!=0){
            int a=abs(n%(-2));//abs函数是确保将-1和1都按照1输出
            s.push(a);
            n=(n-a)/(-2);//这一步是最关键的,
        }
        while(!s.empty()){
            str1+=s.top()+'0';
            s.pop();
        }
        return str1;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/88931303
今日推荐