Leetcode: Add Binary (Java) 如何在一个char和一个int之间进行加法?
Leetcode: Add Binary (Java) How can it perform addition between one char and one int?
class Solution {
public String addBinary(String a, String b) {
int len1 = a.length() - 1;
int len2 = b.length() - 1;
int carry = 0;
StringBuilder sb = new StringBuilder();
while (len1 >= 0 || len2 >= 0){
int sum = carry;
if (len1 >= 0) sum += a.charAt(len1) - '0';
if (len2 >= 0) sum += b.charAt(len2) - '0';
sb.append(sum%2);
carry = sum/2;
len1--;
len2--;
}
if(carry != 0) sb.append(carry);
return sb.reverse().toString();
}
}
显然,这段代码适用于解决方案,我只是很难理解这个问题。对于这一行:
sum += a.charAt(len1) - '0';
sum 是一个整数,a.charAt(len1) returns 是一个字符,它如何在整数和字符之间进行加法?另外,“0”是什么意思?
char
s 本质上是更小的整数,带有与之相关的精美打印。一个char
其实就是保存了一个特定字符的unicode编码,可以当做一个整数来进行加减运算。一个巧妙的事情是代表数字的字符是连续的(“0”后跟“1”,再后跟“2”,等等)。因此,如果您从一个字符中减去“0”(即“字符 0 的 unicode 代码”),您将得到它代表的实际数字。
class Solution {
public String addBinary(String a, String b) {
int len1 = a.length() - 1;
int len2 = b.length() - 1;
int carry = 0;
StringBuilder sb = new StringBuilder();
while (len1 >= 0 || len2 >= 0){
int sum = carry;
if (len1 >= 0) sum += a.charAt(len1) - '0';
if (len2 >= 0) sum += b.charAt(len2) - '0';
sb.append(sum%2);
carry = sum/2;
len1--;
len2--;
}
if(carry != 0) sb.append(carry);
return sb.reverse().toString();
}
}
显然,这段代码适用于解决方案,我只是很难理解这个问题。对于这一行:
sum += a.charAt(len1) - '0';
sum 是一个整数,a.charAt(len1) returns 是一个字符,它如何在整数和字符之间进行加法?另外,“0”是什么意思?
char
s 本质上是更小的整数,带有与之相关的精美打印。一个char
其实就是保存了一个特定字符的unicode编码,可以当做一个整数来进行加减运算。一个巧妙的事情是代表数字的字符是连续的(“0”后跟“1”,再后跟“2”,等等)。因此,如果您从一个字符中减去“0”(即“字符 0 的 unicode 代码”),您将得到它代表的实际数字。