Skip to content

Commit a722bb2

Browse files
committed
leetcode 12/27/2013
1 parent 10f4324 commit a722bb2

14 files changed

Lines changed: 256 additions & 0 deletions

LeetCode/climbStairs.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
int climbStairs(int n) {
4+
if (n == 1) return 1;
5+
if (n == 2) return 2;
6+
vector<int> mm(n + 1);
7+
mm[1] = 1;
8+
mm[2] = 2;
9+
for (int i = 3; i <= n; ++i) {
10+
mm[i] = mm[i - 1] + mm[i - 2];
11+
}
12+
return mm[n];
13+
}
14+
};

LeetCode/deleteDuplicates.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *deleteDuplicates(ListNode *head) {
12+
ListNode *ret = head, *p = head, *prev = head;
13+
if (ret == NULL || ret->next == NULL) return ret;
14+
int last = head->val - 1;
15+
while (head != NULL) {
16+
if (head->val != last) {
17+
last = head->val;
18+
p->val = last;
19+
prev = p;
20+
p = p->next;
21+
}
22+
head = head->next;
23+
}
24+
prev->next = NULL;
25+
return ret;
26+
}
27+
};

LeetCode/generate.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > generate(int numRows) {
4+
vector<vector<int> > ret;
5+
if (numRows == 0) return ret;
6+
vector<int> m;
7+
m.push_back(1);
8+
ret.push_back(m);
9+
if (numRows == 1) return ret;
10+
for (int i = 2; i <= numRows; ++i) {
11+
m.clear();
12+
m.push_back(1);
13+
for (int j = 1; j < i - 1; ++j) m.push_back(ret[i - 2][j] + ret[i - 2][j - 1]);
14+
m.push_back(1);
15+
ret.push_back(m);
16+
}
17+
return ret;
18+
}
19+
};

LeetCode/lengthOfLastWord.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
vector<string> split( const string& s, const string& delim =" " ) {
4+
vector<string> res;
5+
string t;
6+
for ( int i = 0 ; i != s.size() ; i++ ) {
7+
if ( delim.find( s[i] ) != string::npos ) {
8+
if ( !t.empty() ) {
9+
res.push_back( t );
10+
t = "";
11+
}
12+
} else {
13+
t += s[i];
14+
}
15+
}
16+
if ( !t.empty() ) {
17+
res.push_back(t);
18+
}
19+
return res;
20+
}
21+
int lengthOfLastWord(const char *s) {
22+
string str(s);
23+
vector<string> ret = split(str, " ");
24+
if (ret.empty()) return 0;
25+
return ret.back().length();
26+
}
27+
};

LeetCode/maxSubArray.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public:
3+
int maxSubArray(int A[], int n) {
4+
int ret = A[0], t = A[0];
5+
for (int i = 1; i < n; ++i) {
6+
t = max(0, t) + A[i];
7+
ret = max(ret, t);
8+
}
9+
return ret;
10+
}
11+
};

LeetCode/merge.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
void merge(int A[], int m, int B[], int n) {
4+
int idx = m + n - 1;
5+
int ia = m - 1, ib = n - 1;
6+
while (idx >= 0) {
7+
if (ia < 0) {
8+
while (idx >= 0) A[idx--] = B[ib--];
9+
}
10+
else if (ib < 0) {
11+
while (idx >= 0) A[idx--] = A[ia--];
12+
}
13+
else if (A[ia] > B[ib]) A[idx--] = A[ia--];
14+
else A[idx--] = B[ib--];
15+
}
16+
}
17+
};

LeetCode/minPathSum.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int minPathSum(vector<vector<int> > &grid) {
4+
int m = grid.size(), n = grid[0].size();
5+
vector<vector<int> > mm(m, vector<int>(n));
6+
mm[0][0] = grid[0][0];
7+
for (int i = 1; i < n; ++i) mm[0][i] = mm[0][i - 1] + grid[0][i];
8+
for (int i = 1; i < m; ++i) mm[i][0] = mm[i - 1][0] + grid[i][0];
9+
for (int i = 1; i < m; ++i) {
10+
for (int j = 1; j < n; ++j) {
11+
mm[i][j] = min(mm[i - 1][j], mm[i][j - 1]) + grid[i][j];
12+
}
13+
}
14+
return mm[m - 1][n - 1];
15+
}
16+
};

LeetCode/permute.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > permute(vector<int> &num) {
4+
vector<vector<int> > ret;
5+
sort(num.begin(), num.end());
6+
do {
7+
ret.push_back(num);
8+
} while (next_permutation(num.begin(), num.end()));
9+
return ret;
10+
}
11+
};

LeetCode/plusOne.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
vector<int> plusOne(vector<int> &digits) {
4+
int n = digits.size();
5+
int add = 1;
6+
for (int i = n - 1; i >= 0; --i) {
7+
digits[i]++;
8+
if (digits[i] == 10) {
9+
digits[i] = 0;
10+
add = 1;
11+
} else {
12+
add = 0;
13+
break;
14+
}
15+
}
16+
if (add == 1) {
17+
digits.push_back(0);
18+
++n;
19+
for (int i = n - 1; i >= 1; --i) digits[i] = digits[i - 1];
20+
digits[0] = 1;
21+
}
22+
return digits;
23+
}
24+
};

LeetCode/removeDuplicatesII.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int removeDuplicates(int A[], int n) {
4+
int last = A[0] - 1, cnt = 0, idx = 0;
5+
for (int i = 0; i < n; ++i) {
6+
if (A[i] == last) {
7+
if (++cnt <= 2) A[idx++] = A[i];
8+
} else {
9+
last = A[i];
10+
cnt = 1;
11+
A[idx++] = A[i];
12+
}
13+
}
14+
return idx;
15+
}
16+
};

0 commit comments

Comments
 (0)