JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-11-23
目录

负二进制转换Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2)表示。

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

示例 1:

输入:n = 2
输出:"110"
解释:(-2)2 + (-2)1 = 2

示例 2:

输入:n = 3
输出:"111"
解释:(-2)2 + (-2)1 + (-2)0 = 3

示例 3:

输入:n = 4
输出:"100"
解释:(-2)2 = 4

提示:

  • 0 <= n <= 109

# 思路

需要分正数位和复数位(也就是从右往左的偶数下标和奇数下标),假如是正数位,那么mod2的余数就是这一位的值,假如是负数位,那么mod2为0的时候正常,假如mod2之后是1,注意此时这一位可以是1,那么整个数就少了1,需要在原数字上再加1,才能补回来

# 解法


class Solution {
    // 需要分正数位和复数位(也就是从右往左的偶数下标和奇数下标),假如是正数位,那么mod2的余数就是这一位的值,假如是负数位,那么mod2为0的时候正常,假如mod2之后是1,注意此时这一位可以是1,那么整个数就少了1,需要在原数字上再加1,才能补回来
    public String baseNeg2(int n) {

        if(n==0){return "0";}
        StringBuilder ans=new StringBuilder();
        for(int i=0;n>0;i^=1){
            ans.append(n&1);
            if(i==0){
                n = n>>1;
            }else{
                n = (n>>1)+(n&1);
            }
        }
        return ans.reverse().toString();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1633. 各赛事的用户注册率 Java
07-02
02
1636. 按照频率将数组升序排序 Java
07-02
03
1639. 通过给定词典构造目标字符串的方案数 Java
07-02
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式