Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
思路
- 类似于大数大数加法操作,逐位进行操作。
- 每一位字符-‘0’得到的数字,累加后与2比较,来确定进位与否。
- 最高位的可能位1,或不存在,且只有计算结束时才能确定存在与否,动态分配内存方面应特殊对待。
C语言实现,一方面逐位操作要考虑周全,另一方面C语言具有的字符串处理弱势,需要较多冗余处理操作。
1 |
|
补充: 在C语言中对字符串的处理功能是比较弱和相对笨拙的,但思路与语言无关。
对于内存空间开辟多少字节的判断上,最初是无法判断结果是n还是n+1的。
上述代码中采用了一种Tricky的方式:当首位为0时,res++,再返回res。这样当主函数调用free释放内存时,这是不安全的。
优化方式: 开始时仅开辟n个字节,最后如果首位为1的情况,重新开辟n+1个字节,strcpy内存空间,释放原来n个字节, 返回新的n+1个字节的地址。
虽然优化方式饶了远,但可以完美解决内存分配的问题。若采用Java、Python、C++等高级语言就不会面临这种手动分配内存的苦恼了。
结果
294 / 294 test cases passed.
Status: Accepted
Runtime: 0 ms
Submitted: 0 minutes ago