【每日一题Day210】LC1073负二进制数相加 | 模拟

简介: 【每日一题Day210】LC1073负二进制数相加 | 模拟

负二进制数相加【LC1073】

给出基数为 -2 的两个数 arr1arr2,返回两数相加的结果。

数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。

例如,arr = [1,1,0,1] 表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3数组形式 中的数字 arr 也同样不含前导零:即 arr == [0]arr[0] == 1

返回相同表示形式的 arr1arr2 相加的结果。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组。

“出狱”啦

  • 思路

image.png

class Solution {
    public int[] addNegabinary(int[] arr1, int[] arr2) {  
        // 负二进制数的性质
        // 1 + 1 进位 -1
        // 0 - 1 进位 1,当前位置1     
        List<Integer> res = new ArrayList<>();
        int n = arr1.length, m = arr2.length;
        int i = n - 1, j = m - 1;
        int cnt = 0;
        while (i >= 0 || j >= 0 || cnt != 0){
            int num1 = i >= 0 ? arr1[i] : 0;
            int num2 = j >= 0 ? arr2[j] : 0;
            int x = num1 + num2 + cnt;
            cnt = 0;
            if (x >= 2){
                x -= 2;
                cnt -= 1;
            }else if (x == -1){
                x = 1;
                cnt += 1;
            }
            res.add(x);
            i--;
            j--;     
        }
        // 去除前导0
        while (res.size() > 1 && res.get(res.size() - 1) == 0){
            res.remove(res.size() - 1);
        }
        // 反转
        Collections.reverse(res);
        return res.stream().mapToInt(x -> x).toArray();
    }
}

image.png

目录
相关文章
|
2月前
【每日一题Day202】LC1015可被 K 整除的最小整数 | 模运算
【每日一题Day202】LC1015可被 K 整除的最小整数 | 模运算
37 2
|
2月前
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
34 0
【每日一题Day127】LC1238循环码排列 | 格雷码构造 位运算
|
2月前
【每日一题Day268】LC415字符串相加 | 模拟
【每日一题Day268】LC415字符串相加 | 模拟
31 0
|
2月前
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
【每日一题Day290】LC1281整数的各位积和之差 | 模拟
19 0
|
2月前
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
32 0
|
2月前
【每日一题Day359】LC2520统计能整除数字的位数 | 数学模拟
【每日一题Day359】LC2520统计能整除数字的位数 | 数学模拟
35 0
|
2月前
|
机器学习/深度学习
【每日一题Day263】LC2544交替数字和 | 数学
【每日一题Day263】LC2544交替数字和 | 数学
33 0
|
2月前
|
存储
【每日一题Day253】LC2两数相加 | 链表模拟
【每日一题Day253】LC2两数相加 | 链表模拟
18 0
|
2月前
【每日一题Day169】LC1107负二进制转换 | 模拟进位 位运算
【每日一题Day169】LC1107负二进制转换 | 模拟进位 位运算
21 1
|
2月前
|
存储
leetcode:415. 字符串相加(模拟竖式计算)
leetcode:415. 字符串相加(模拟竖式计算)
33 0