刷题日记。。补,时间忘了(上周五)
两道简单题
学习内容:
- atoi函数实现:https://leetcode.cn/problems/string-to-integer-atoi/description/
#define TEN 10
int myAtoi(char* s) {
while (*s != '\0' && *s == ' ') {
++s; }
int isNegative = 0;
if (*s == '-' || *s == '+') {
isNegative = *s++ == '-';
}
int ans = 0;
for (; *s != '\0'; ++s) {
if (*s < '0' || *s > '9') {
break;
}
int digit = *s - '0';
if (isNegative) {
digit = -digit;
if (ans < (INT_MIN - digit) / 10) {
return INT_MIN;
}
} else {
if (ans > (INT_MAX - digit) / 10) {
return INT_MAX;
}
}
ans = ans * TEN + digit;
}
return ans;
}
2.二进制求和 https://leetcode.cn/problems/add-binary/description/
char* addBinary(char* a, char* b) {
int len_a = strlen(a);
int len_b = strlen(b);
int max_len = len_a > len_b ? len_a : len_b;
char* rc = (char*)malloc(sizeof(char) * (max_len + 1 + 1));
rc[max_len + 1] = '\0';
char* p_a = a + len_a - 1;
char* p_b = b + len_b - 1;
int carry = 0;
int rc_ind = max_len;
while ((p_a >= a) || (p_b >= b) || carry) {
int sum = 0;
int num_a = (p_a >= a) ? (p_a[0] == '0' ? 0 : 1) : 0;
int num_b = (p_b >= b) ? (p_b[0] == '0' ? 0 : 1) : 0;
sum = num_a + num_b + carry;
rc[rc_ind] = '0' + sum % 2;
carry = sum / 2;
--rc_ind;
--p_a;
--p_b;
}
return rc[0] == '1' ? rc : (rc + 1);
}