java中如何将字符串从任意进制转为十进制

力扣刷题:

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = “11”, b = “1”
输出: “100”
示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

提示:

每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。

题目来源
两个方法解决问题:

  1. Integer.parseInt(“11”, 2);
    第一个参数是字符串 ,第二个参数表示这个字符串是什么进制的
    最终结果就是从对应进制转为十进制数
  2. Integer.toBinaryString(i)
    参数类型是整型 作用:将十进制数转为二进制字符串

有问题的解答:
先将字符串转为十进制字符串 再将字符串转为整数,相加后在转为二进制字符串 中间饶了很大一个弯

 String s = new BigInteger(a, 2).toString(10);
            String s1 = new BigInteger(b, 2).toString(10);
            Long aLong = Long.valueOf(s);
            Long aLong1 = Long.valueOf(s1);
            long l = aLong + aLong1;
            return Long.toBinaryString(l);

解法:

   public static String addBinary(String a, String b) {
        //  新建StringBuilder对象 用:增加字符串
            StringBuilder ans = new StringBuilder();
            //判断总的位数
            int n = Math.max(a.length(), b.length()), carry = 0;//用于记录加的和
            for (int i = 0; i < n; ++i) {
                carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;//先算三目运算法
                carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;//解释为什么要加0链接https://blog.csdn.net/qq_45337491/article/details/105738537
                //获得相加后的值
                //取模得值
                ans.append((char) (carry % 2+'0' ));
                carry /= 2;
            }

            //到末尾还有就进一位
            if (carry > 0) {
                ans.append('1');
            }

            //将结果进行反转
            ans.reverse();

            return ans.toString();//转为字符串
        }

你可能感兴趣的:(后端,数据结构,java,算法)