0%

ARST打卡第101周[101/521]

Algorithm-二进制相加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* 
这里题解可以看到更简单的做法
https://leetcode-cn.com/problems/add-binary/solution/er-jin-zhi-qiu-he-by-leetcode-solution/
*/
#include <iostream>
#include <cstring>
#include <string>

using namespace std;

class Solution {
public:
string addBinary(string ls, string rs) {
int l_sz = ls.length();
int r_sz = rs.length();
string ans = "";
int tmp = 0;
int added = 0;
int big_sz = l_sz > r_sz ? l_sz : r_sz;
for (int i = 0; i < big_sz || added; i++) {
tmp = added;
if (i < l_sz) {
tmp += ls[l_sz - 1 - i] == '1' ? 1 : 0;
}
if (i < r_sz) {
tmp += rs[r_sz - 1 - i] == '1' ? 1 : 0;
}
// 小心漏了1111,1111这种导致的tmp = 3
if (tmp >= 2) {
added = 1;
} else {
added = 0;
}

// 错在tmp = 2 的时候也有是 0 ,这一点没注意
if (tmp & 1) {
ans = '1' + ans;
} else {
ans = '0' + ans;
}
printf("i=[%d] tmp=%d added=%d ans=%s\n", i, tmp, added, ans.c_str());
}
return ans;
}
};

int main() {
string str_a, str_b;
cin >> str_a;
cin >> str_b;
Solution a;
cout << a.addBinary(str_a, str_b) << endl;

return 0;
}

Review【TED演讲】在健康时讨论死亡

在活着的时候立好遗嘱,让自己以自己希望的方式被埋葬,被处理,完全自己的最后的爱与和平

计划好的事情,总会多一些内心的从容和平静

• 我们曾如此渴望命运的波澜
• 到最后才发现
• 人生最曼妙的风景
• 竟是內心的淡定与从容…

Tips

Django实现任意文件上传(最简单的方法)

Share-二进制相乘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <string>
#include <cstring>
#include <iostream>
using namespace std;

bool is_zore(string str) {
int sz = str.length();
for (int i = 0; i < sz; i++) {
if (str[i] == '1') {
return false;
}
}
return true;
}

// https://leetcode-cn.com/problems/add-binary/ ,2021年04月07日17:43:41 搜了一下,可以用这题检测一下
// 发现wa了
/*
输入:
"1111"
"1111"
输出:
"1010"
预期结果:
"11110"
*/
string add_bin_str(string ls, string rs) {
int l_sz = ls.length();
int r_sz = rs.length();
string ans = "";
int tmp = 0;
int added = 0;
int big_sz = l_sz > r_sz ? l_sz : r_sz;
for (int i = 0; i < big_sz || added; i++) {
tmp = added;
if (i < l_sz) {
tmp += ls[l_sz - 1 - i] == '1' ? 1 : 0;
}
if (i < r_sz) {
tmp += rs[r_sz - 1 - i] == '1' ? 1 : 0;
}
// 小心漏了1111,1111这种导致的tmp = 3
if (tmp >= 2) {
added = 1;
} else {
added = 0;
}

// if (tmp == 0) {
// 错在tmp = 2 的时候也有是 0 ,这一点没注意
// 2021年04月07日17:34:18 人没了
if (tmp & 1) {
ans = '1' + ans;
} else {
ans = '0' + ans;
}
}
return ans;
}

int main(){
string str, ls, rs;
cin >> str;
int pos = str.find_first_of(';');
if (pos == string::npos) {
printf("invalid input\n");
return -1;
}

ls = str.substr(0, pos);
rs = str.substr(pos + 1, str.length() - pos - 1);

int sz = ls.length();
// 0 判断
if (is_zore(ls) || is_zore(rs)) {
puts("0");
return 0;
}

string ans = "";
for (int i = sz - 1, j = 0; i > -1; i--, j++) {
if (ls[i] == '1') {
// printf("before add in j = [%d], ans is %s\n", j , ans.c_str());
ans = add_bin_str(ans, rs + string(j, '0'));
// printf("after add in j = [%d], ans is %s\n", j , ans.c_str());
}
}
cout << ans << endl;
return 0;
}