加载中...
1017-负二进制转换(Convert to Base -2)
发表于:2021-12-03 | 分类: 中等
字数统计: 452 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/convert-to-base-2

英文原文

Given an integer n, return a binary string representing its representation in base -2.

Note that the returned string should not have leading zeros unless the string is "0".

 

Example 1:

Input: n = 2
Output: "110"
Explantion: (-2)2 + (-2)1 = 2

Example 2:

Input: n = 3
Output: "111"
Explantion: (-2)2 + (-2)1 + (-2)0 = 3

Example 3:

Input: n = 4
Output: "100"
Explantion: (-2)2 = 4

 

Constraints:

  • 0 <= n <= 109

中文题目

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

通过代码

高赞题解

通过数学推导可以得到+K/-K进制的通用转化法

class Solution {
public:
    // 无论K是正数还是负数都支持(只支持-10~10进制,因为更高进制需要引入字母)
    vector<int> baseK(int N, int K) {
        if (N == 0) return {0};
        vector<int> res;
        while (N != 0) {
            int r = ((N % K) + abs(K)) % abs(K); // 此处为关键
            res.push_back(r);
            N -= r;
            N /= K;
        }
        reverse(res.begin(), res.end());
        return res;
    }
    string baseNeg2(int N) {
        vector<int> nums = baseK(N, -2);
        string res;
        for (auto x : nums) res += to_string(x);
        return res;
    }
};

image.png

统计信息

通过次数 提交次数 AC比率
3716 6602 56.3%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言

相似题目

题目 难度
加密数字 中等
上一篇:
1016-子串能表示从 1 到 N 数字的二进制串(Binary String With Substrings Representing 1 To N)
下一篇:
1018-可被 5 整除的二进制前缀(Binary Prefix Divisible By 5)
本文目录
本文目录