Skip to content

Commit 8ddbe46

Browse files
committed
5 problems solved.
1 parent b1d3705 commit 8ddbe46

File tree

5 files changed

+242
-0
lines changed

5 files changed

+242
-0
lines changed

src/151.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
void reverseWords(string &s) {
2+
int len = s.size();
3+
vector<string> word;
4+
5+
int index = s.find_first_not_of(' ');
6+
if (index == string::npos)
7+
{
8+
s = "";
9+
return;
10+
}
11+
12+
while (index != string::npos && index < len)
13+
{
14+
int pos = s.find_first_of(' ', index);
15+
if (pos == string::npos)
16+
{
17+
word.push_back(s.substr(index));
18+
break;
19+
}
20+
else
21+
{
22+
word.push_back(s.substr(index, pos-index));
23+
index = s.find_first_not_of(' ', pos);
24+
}
25+
}
26+
len = word.size();
27+
s = "";
28+
for (int i = len-1; i > 0; --i)
29+
s += word[i] + " ";
30+
s += word[0];
31+
}

src/165.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
int compareVersion(string version1, string version2) {
2+
int len1 = version1.size();
3+
int len2 = version2.size();
4+
int i = 0, j = 0;
5+
while (i < len1 && j < len2)
6+
{
7+
int pos1 = version1.find('.', i);
8+
int pos2 = version2.find('.', j);
9+
if (pos1 == string::npos)
10+
{
11+
if (pos2 == string::npos)
12+
return docmp(version1.substr(i), version2.substr(j));
13+
else
14+
{
15+
string mainversion2 = version2.substr(j, pos2 - j);
16+
int res = docmp(version1.substr(i), mainversion2);
17+
if (res != 0)
18+
return res;
19+
else
20+
return -1 * is_subversion_zero(version2.substr(pos2 + 1));
21+
}
22+
}
23+
else
24+
{
25+
string subversion1 = version1.substr(i, pos1 - i);
26+
if (pos2 == string::npos)
27+
{
28+
int res = docmp(subversion1, version2.substr(j));
29+
if (res != 0)
30+
return res;
31+
else
32+
return is_subversion_zero(version1.substr(pos1 + 1));
33+
}
34+
else
35+
{
36+
string subversion2 = version2.substr(j, pos2 - j);
37+
int res = docmp(subversion1, subversion2);
38+
if (res != 0)
39+
return res;
40+
else
41+
{
42+
i = pos1 + 1;
43+
j = pos2 + 1;
44+
}
45+
}
46+
}
47+
}
48+
return 0;
49+
}
50+
51+
int docmp(const string& version1, const string& version2)
52+
{
53+
int first_num1 = version1.find_first_not_of('0');
54+
int first_num2 = version2.find_first_not_of('0');
55+
string v1, v2;
56+
if (first_num1 == string::npos)
57+
v1 = "0";
58+
else
59+
v1 = version1.substr(first_num1);
60+
if (first_num2 == string::npos)
61+
v2 = "0";
62+
else
63+
v2 = version2.substr(first_num2);
64+
int len1 = v1.size();
65+
int len2 = v2.size();
66+
if (len1 < len2)
67+
return -1;
68+
else if (len1 == len2)
69+
{
70+
if (v1 < v2)
71+
return -1;
72+
else if (v1 == v2)
73+
return 0;
74+
else
75+
return 1;
76+
}
77+
else
78+
return 1;
79+
}
80+
81+
int is_subversion_zero(const string& str)
82+
{
83+
int len = str.size();
84+
for (int i = 0; i < len; ++i)
85+
{
86+
if (str[i] != '0' && str[i] != '.')
87+
return 1;
88+
}
89+
return 0;
90+
}

src/2.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
2+
if (l1 == nullptr)
3+
return l2;
4+
if (l2 == nullptr)
5+
return l1;
6+
7+
int sum = l1->val + l2->val;
8+
int ct = sum/10;
9+
ListNode* h = new ListNode(sum%10);
10+
ListNode* node = h;
11+
l1 = l1->next;
12+
l2 = l2->next;
13+
while (l1 && l2)
14+
{
15+
sum = l1->val + l2->val + ct;
16+
node->next = new ListNode(sum%10);
17+
ct = sum/10;
18+
node = node->next;
19+
l1 = l1->next;
20+
l2 = l2->next;
21+
}
22+
while (l1)
23+
{
24+
sum = l1->val + ct;
25+
node->next = new ListNode(sum%10);
26+
ct = sum/10;
27+
node = node->next;
28+
l1 = l1->next;
29+
}
30+
while (l2)
31+
{
32+
sum = l2->val + ct;
33+
node->next = new ListNode(sum%10);
34+
ct = sum/10;
35+
node = node->next;
36+
l2 = l2->next;
37+
}
38+
if (ct != 0)
39+
{
40+
node->next = new ListNode(ct);
41+
node = node->next;
42+
}
43+
node->next = nullptr;
44+
45+
return h;
46+
}

src/43.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
string multiply(string num1, string num2) {
2+
int len1 = num1.size();
3+
int len2 = num2.size();
4+
if (len1 == 0 || len2 == 0)
5+
return "";
6+
if (num1 == "0" || num2 == "0")
7+
return "0";
8+
9+
vector<string> subsum;
10+
vector<int> digitlen;
11+
int sum, ct;
12+
for (int i = len2-1; i >= 0; --i)
13+
{
14+
if (num2[i] == '0')
15+
continue;
16+
sum = 0;
17+
ct = 0;
18+
string s(len2-1-i, '0');
19+
for (int j = len1-1; j >= 0; --j)
20+
{
21+
sum = (num2[i]-'0') * (num1[j]-'0') + ct;
22+
s.push_back(sum%10+'0');
23+
ct = sum/10;
24+
}
25+
if (ct > 0)
26+
s.push_back(ct+'0');
27+
subsum.push_back(s);
28+
digitlen.push_back(s.size());
29+
}
30+
31+
string res;
32+
int len = subsum.size();
33+
int i = 0;
34+
ct = 0;
35+
while (true)
36+
{
37+
sum = 0;
38+
bool flag = false;
39+
for (int j = 0; j < len; ++j)
40+
{
41+
if (i < digitlen[j])
42+
{
43+
sum += subsum[j][i] - '0';
44+
flag = true;
45+
}
46+
}
47+
if (!flag)
48+
break;
49+
sum += ct;
50+
res.push_back(sum%10+'0');
51+
ct = sum/10;
52+
++i;
53+
}
54+
if (ct > 0)
55+
res.push_back(ct+'0');
56+
57+
reverse(res.begin(), res.end());
58+
return res;
59+
}

src/791.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
string customSortString(string S, string T) {
2+
int len = S.size();
3+
if (len <= 1)
4+
return T;
5+
6+
vector<int> prio(26, -1);
7+
for (int i = 0; i < len; ++i)
8+
prio[S[i]-'a'] = i;
9+
10+
auto cmp = [=](char a, char b) {
11+
return prio[a-'a'] < prio[b-'a'];
12+
};
13+
14+
sort(T.begin(), T.end(), cmp);
15+
return T;
16+
}

0 commit comments

Comments
 (0)