LeetCode 306. Additive Number
来源:互联网 发布:网络排名推广 编辑:程序博客网 时间:2024/05/16 07:59
I first thought about the commented out method. However, that one is hard to split the numbers which start with '0'.
Second Method is from leetcode discuss forum.
// try backtracking?//bool isAdditiveNumber(string nums, int start, int end) {// if(end == nums.size()) return true;// if(end - start < 2) return false;// for(int i = start; i < nums.size() - 2; ++i) {// string num_1 = nums.substr(start, i - start + 1);// for(int j = i + 1; j < nums.size() - 1; ++j) {// string num_2 = nums.substr(i + 1, j - i);// for(int k = j + 1; k < nums.size(); ++k) {// string num_3 = nums.substr(j + 1, k - j);// int a = stoi(num_1);// int b = stoi(num_2);// int c = stoi(num_3);// if(a + b == c) {// return isAdditiveNumber(nums, i + 1, k + 1);// }// }// }// }// return false;//}////bool isAdditiveNumber(string num) {// int start = 0;// int end = num.size() - 1;// return isAdditiveNumber(num, start, end);//}
bool ok(string& num, int idx, unsigned long a, unsigned long b) { if(idx == num.size()) return true; unsigned long c = 0; for(int i = idx; i < num.size(); ++i) { c = c * 10 + num[i] - '0'; if(a + b == c) { if(ok(num, i + 1, b, c)) return true; } else if(a + b < c) break; if(num[idx] == '0') break; } return false;}bool isAdditiveNumber(string num) { unsigned long a = 0; // pay attention to the unsigned long type. for(int i = 0; i < num.size(); ++i) { a = a * 10 + num[i] - '0'; unsigned long b = 0; for(int j = i + 1; j < num.size(); ++j) { b = b * 10 + num[j] - '0'; if(j + 1 < num.size() && ok(num, j + 1, a, b)) return true; if(num[i+1] == '0') break; } if(num[0] == '0') break; } return false;}int main(void) { cout << isAdditiveNumber("12358") << endl; cout << isAdditiveNumber("211738") << endl; cout << isAdditiveNumber("199100199") << endl; cout << isAdditiveNumber("198019823962") << endl;}
0 0
- [leetcode] 306. Additive Number
- [LeetCode]306. Additive Number
- LeetCode:306. Additive Number
- leetcode 306. Additive Number
- 306. Additive Number LeetCode
- LeetCode *** 306. Additive Number
- LeetCode 306. Additive Number
- [LeetCode]--306. Additive Number
- [leetcode] 306. Additive Number
- 【LeetCode】306. Additive Number
- leetcode 306. Additive Number
- [LeetCode]306. Additive Number
- LeetCode 306. Additive Number
- leetcode 306. Additive Number
- [leetcode]306. Additive Number
- leetcode 306. Additive Number
- (Java)LeetCode-306. Additive Number
- [leetcode] 306. Additive Number 解题报告
- 友盟抓取crash Log- 解析IOS崩溃日志
- erlang 启动参数
- erlang throw跳出递归的妙用
- Google Postman插件
- 导航点击变色(防刷新)纯前台代码实现
- LeetCode 306. Additive Number
- 在类中的static代码获得当前类的方法
- phpstorm表单递交post出错get正确的解决方法
- python学习资源
- comlications精萃
- vector容器用法
- brick textures
- unity3d ugui 图片点击与拖动同存互不影响
- storm学习