Skip to content

Commit e3bd6fd

Browse files
committed
2 problem
1 parent 5bc12ed commit e3bd6fd

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
219219
#### [301. Remove Invalid Parentheses](https://github.com/hitzzc/go-leetcode/tree/master/remove_invalid_parentheses)
220220
#### [303. Range Sum Query - Immutable](https://github.com/hitzzc/go-leetcode/tree/master/range_sum_query_immutable)
221221
#### [304. Range Sum Query 2D - Immutable](https://github.com/hitzzc/go-leetcode/tree/master/range_sum_query_immutable)
222+
#### [306. Additive Number](https://github.com/hitzzc/go-leetcode/tree/master/additive_number)
223+
#### [307. Range Sum Query - Mutable](https://github.com/hitzzc/go-leetcode/tree/master/range_sum_query_mutable)
222224

223225

224226

additive_number/additive_number.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <string>
2+
using namespace std;
3+
4+
class Solution {
5+
public:
6+
bool isAdditiveNumber(string num) {
7+
return DFS(num, 0, 0, 0, 0);
8+
}
9+
10+
bool DFS(string& num, int start, int length, int first, int second) {
11+
if (start == num.size()) {
12+
if (length > 2) return true;
13+
else return false;
14+
}
15+
int current_num = 0;
16+
for (int i = start; i < num.size(); ++i) {
17+
if (num[start] == '0' && i != start) break;
18+
current_num = 10*current_num + num[i]-'0';
19+
if (length == 0) first = current_num;
20+
else if (length == 1) second = current_num;
21+
else if (current_num != first+second) continue;
22+
else {
23+
first = second;
24+
second = current_num;
25+
}
26+
if (DFS(num, i+1, length+1, first, second)) return true;
27+
}
28+
return false;
29+
}
30+
};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class NumArray {
2+
vector<int> records;
3+
vector<int> ori;
4+
public:
5+
NumArray(vector<int> &nums): records(vector<int>(nums.size()+1, 0)), ori(nums) {
6+
for (int i = 0; i < nums.size(); ++i) {
7+
add(i+1, nums[i]);
8+
}
9+
}
10+
11+
void update(int i, int val) {
12+
int diff = val - ori[i];
13+
ori[i] = val;
14+
add(i+1, diff);
15+
}
16+
17+
int sumRange(int i, int j) {
18+
return sum(j+1) - sum(i);
19+
}
20+
21+
void add(int x, int diff) {
22+
while (x < records.size()) {
23+
records[x] += diff;
24+
x += lowbit(x);
25+
}
26+
}
27+
28+
int sum(int x) {
29+
int ret = 0;
30+
while (x > 0) {
31+
ret += records[x];
32+
x -= lowbit(x);
33+
}
34+
return ret;
35+
}
36+
37+
int lowbit(int n) {
38+
return n&-n;
39+
}
40+
};

0 commit comments

Comments
 (0)