Skip to content

Commit bb25592

Browse files
committed
10 problems solved.
1 parent be12b25 commit bb25592

File tree

10 files changed

+481
-0
lines changed

10 files changed

+481
-0
lines changed

src/19.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
ListNode* removeNthFromEnd(ListNode* head, int n) {
2+
if (n <= 0)
3+
return head;
4+
vector<ListNode*> vec;
5+
ListNode* p = head;
6+
int len = 0;
7+
while (p != NULL)
8+
{
9+
vec.push_back(p);
10+
p = p->next;
11+
len++;
12+
}
13+
if (n == len)
14+
{
15+
head = vec[0]->next;
16+
delete vec[0];
17+
}
18+
else
19+
{
20+
vec[len - n - 1]->next = vec[len - n]->next;
21+
delete vec[len - n];
22+
}
23+
24+
return head;
25+
}

src/24.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ListNode* swapPairs(ListNode* head) {
2+
if (head == NULL || head->next == NULL)
3+
return head;
4+
ListNode* p = head;
5+
ListNode* q = head->next;
6+
ListNode* h = q;
7+
8+
p->next = q->next;
9+
q->next = p;
10+
ListNode* k = p->next;
11+
int n = 1;
12+
while (k != NULL)
13+
{
14+
if (n == 1)
15+
{
16+
q = p;
17+
p = k;
18+
k = k->next;
19+
}
20+
else
21+
{
22+
p->next = k->next;
23+
q->next = k;
24+
k->next = p;
25+
k = p->next;
26+
}
27+
n = 1 - n;
28+
}
29+
30+
return h;
31+
}

src/299.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string getHint(string secret, string guess) {
2+
int digitnum1[10] = {0};
3+
int digitnum2[10] = {0};
4+
5+
int sz = secret.size();
6+
int ctA = 0, ctB = 0;
7+
for (int i = 0; i != sz; ++i)
8+
{
9+
digitnum1[secret[i] - '0']++;
10+
digitnum2[guess[i] - '0']++;
11+
if (secret[i] == guess[i])
12+
ctA++;
13+
}
14+
for (int i = 0; i != 10; ++i)
15+
{
16+
ctB += digitnum1[i] < digitnum2[i] ? digitnum1[i] : digitnum2[i];
17+
}
18+
19+
return num2str(ctA) + "A" + num2str(ctB - ctA) + "B";
20+
}
21+
22+
string num2str(int n)
23+
{
24+
if (n == 0)
25+
return "0";
26+
27+
string str;
28+
while (n != 0)
29+
{
30+
str.push_back(char(n % 10 + '0'));
31+
n /= 10;
32+
}
33+
reverse(str.begin(), str.end());
34+
return str;
35+
}

src/36.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
bool isValidSudoku(vector<vector<char>>& board) {
2+
for (int i = 0; i < 9; ++i)
3+
{
4+
int arr1[9] = {0};
5+
for (int j = 0; j < 9; ++j)
6+
{
7+
if (board[i][j] == '.')
8+
continue;
9+
else if ((board[i][j] >= '1' && board[i][j] <= '9'))
10+
{
11+
int pos1 = board[i][j] - '1';
12+
if (arr1[pos1] == 1)
13+
return false;
14+
else
15+
arr1[pos1] = 1;
16+
}
17+
else
18+
return false;
19+
}
20+
}
21+
22+
for (int i = 0; i < 9; ++i)
23+
{
24+
int arr2[9] = {0};
25+
for (int j = 0; j < 9; ++j)
26+
{
27+
if (board[j][i] == '.')
28+
continue;
29+
else if ((board[j][i] >= '1' && board[j][i] <= '9'))
30+
{
31+
int pos2 = board[j][i] - '1';
32+
if (arr2[pos2] == 1)
33+
return false;
34+
else
35+
arr2[pos2] = 1;
36+
}
37+
else
38+
return false;
39+
}
40+
}
41+
42+
for (int i = 0; i < 9; i = i + 3)
43+
{
44+
for (int j = 0; j < 9; j = j + 3)
45+
{
46+
int arr[9] = {0};
47+
for (int m = i; m < i + 3; ++m)
48+
{
49+
for (int n = j; n < j + 3; ++n)
50+
{
51+
if (board[m][n] == '.')
52+
continue;
53+
else if (board[m][n] >= '1' && board[i][j] <= '9')
54+
{
55+
int pos = board[m][n] - '1';
56+
if (arr[pos] == 1)
57+
return false;
58+
else
59+
arr[pos] = 1;
60+
}
61+
else
62+
return false;
63+
}
64+
}
65+
}
66+
}
67+
return true;
68+
}

src/396.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
int maxRotateFunction(vector<int>& A) {
2+
int sz = A.size();
3+
int sum = 0, subsum = 0;
4+
int total = 0;
5+
for (int i = 0; i < sz; ++i)
6+
total += A[i];
7+
for (int i = 0; i < sz; ++i)
8+
subsum += i * A[i];
9+
sum = subsum;
10+
for (int i = 1; i < sz; ++i)
11+
{
12+
subsum = subsum + total - sz * A[sz - i];
13+
if (subsum > sum)
14+
sum = subsum;
15+
}
16+
17+
return sum;
18+
}

src/445.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
2+
string a = calculateNum(l1);
3+
string b = calculateNum(l2);
4+
5+
string c = stradd(a, b);
6+
7+
ListNode* node = new ListNode(c[0]-'0');
8+
ListNode* root = node;
9+
int sz = c.size(), i = 1;
10+
while (i < sz)
11+
{
12+
node = new ListNode(c[i]-'0');
13+
node->next = root;
14+
root = node;
15+
++i;
16+
}
17+
18+
return root;
19+
}
20+
21+
string calculateNum(ListNode* node)
22+
{
23+
string res;
24+
while (node != nullptr)
25+
{
26+
res.push_back(char(node->val + '0'));
27+
node = node->next;
28+
}
29+
30+
return res;
31+
}
32+
33+
string stradd(const string& a, const string& b)
34+
{
35+
string res;
36+
int len1 = a.size(), len2 = b.size();
37+
int i = len1 - 1, j = len2 - 1;
38+
int c = 0;
39+
40+
while (i >= 0 && j >= 0)
41+
{
42+
int tmp = a[i] - '0' + b[j] - '0' + c;
43+
res.push_back(char(tmp%10 + '0'));
44+
c = tmp/10;
45+
--i;
46+
--j;
47+
}
48+
while (i >= 0)
49+
{
50+
int tmp = a[i] - '0' + c;
51+
res.push_back(char(tmp%10 + '0'));
52+
c = tmp/10;
53+
--i;
54+
}
55+
while (j >= 0)
56+
{
57+
int tmp = b[j] - '0' + c;
58+
res.push_back(char(tmp%10 + '0'));
59+
c = tmp/10;
60+
--j;
61+
}
62+
if (c > 0)
63+
res.push_back(char(c + '0'));
64+
65+
return res;
66+
}

src/498.cpp

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
vector<int> findDiagonalOrder(vector<vector<int>>& matrix)
2+
{
3+
vector<int> res;
4+
int row = matrix.size();
5+
if (row == 0)
6+
return res;
7+
if (row == 1)
8+
return matrix[0];
9+
int col = matrix[0].size();
10+
if (col == 1)
11+
{
12+
for (int i = 0; i < row; ++i)
13+
res.push_back(matrix[i][0]);
14+
return res;
15+
}
16+
17+
int i = 0, j = 0;
18+
bool down = false;
19+
while (i < row && j < col)
20+
{
21+
res.push_back(matrix[i][j]);
22+
if (i == row - 1 && j == col - 1)
23+
break;
24+
if (i == 0)
25+
{
26+
if (!down)
27+
{
28+
if (j < col - 1)
29+
++j;
30+
else
31+
++i;
32+
down = !down;
33+
}
34+
else
35+
{
36+
++i;
37+
--j;
38+
}
39+
}
40+
else
41+
{
42+
if (down)
43+
{
44+
if (j == 0)
45+
{
46+
if (i < row - 1)
47+
++i;
48+
else
49+
++j;
50+
down = !down;
51+
}
52+
else
53+
{
54+
if (i < row - 1)
55+
{
56+
++i;
57+
--j;
58+
}
59+
else
60+
{
61+
++j;
62+
down = !down;
63+
}
64+
}
65+
}
66+
else
67+
{
68+
if (j < col - 1)
69+
{
70+
--i;
71+
++j;
72+
}
73+
else
74+
{
75+
++i;
76+
down = !down;
77+
}
78+
}
79+
}
80+
}
81+
82+
return res;
83+
}

src/539.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
int findMinDifference(vector<string>& timePoints) {
2+
int len = timePoints.size();
3+
if (len <= 1)
4+
return 0;
5+
sort(timePoints.begin(), timePoints.end());
6+
int mindiff = calcudiff(timePoints[0], timePoints[1]);
7+
int diff;
8+
for (int i = 2; i < len; ++i)
9+
{
10+
diff = calcudiff(timePoints[i - 1], timePoints[i]);
11+
if (diff < mindiff)
12+
mindiff = diff;
13+
}
14+
diff = calcudiff(timePoints[len - 1], timePoints[0]) + 1440;
15+
if (diff < mindiff)
16+
mindiff = diff;
17+
18+
return mindiff;
19+
}
20+
21+
int calcudiff(const string& t1, const string& t2)
22+
{
23+
int h1 = stoi(t1.substr(0, 2));
24+
int h2 = stoi(t2.substr(0, 2));
25+
int min1 = stoi(t1.substr(3));
26+
int min2 = stoi(t2.substr(3));
27+
28+
return h2*60 + min2 - h1*60 - min1;
29+
}

0 commit comments

Comments
 (0)