leetcode - Additive Number
2016-02-13 23:12
387 查看
题目:
https://leetcode.com/problems/additive-number/
https://leetcode.com/problems/additive-number/
class Solution { public: long long str2num(string str){ stringstream ss(str); long long n; ss >> n; return n; } string num2str(long long i) { stringstream ss; ss << i; return ss.str(); } bool isAdditiveNumber(string num) { if (num.size()<3) return false; //0~i,i~j for (int i = 1; i <= num.size() / 2; ++i) { if (i>1 && num[0] == '0') return false; for (int j = i + 1; j<num.size(); ++j) { int s1 = i, s2 = j - i, s3 = num.size() - s1 - s2; if (max(s1, s2)>s3) break; string str1(num, 0, s1), str2(num, i, s2); if (str2.size()>1 && str2[0] == '0') break; long long n1 = str2num(str1), n2 = str2num(str2); pair<bool, unsigned int> res = judge(num, j, n1, n2); if (res.first) { if (isAdditiveNumber_core(num, s1 + s2 + res.second, n2, n1 + n2)) return true; } } } return false; } bool isAdditiveNumber_core(string& num, int start, long long n1, long long n2) { if (start == num.size()) return true; if (start>num.size()) return false; pair<bool, unsigned int> res = judge(num, start, n1, n2); if (res.first) { return isAdditiveNumber_core(num, start + res.second, n2, n1 + n2); } else { return false; } } pair<bool, unsigned int> judge(string& num, int start, long long n1, long long n2) { string str3 = num2str(n1 + n2); if (str3.size()>num.size() - start) return make_pair(false, 0); for (int i = 0; i<str3.size(); ++i) { if (str3[i] != num[start + i]) return make_pair(false, 0); } return make_pair(true, str3.size()); } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 开发人员、程序员与计算机科学家三者之间的区别
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 程序员必备,程序员四大忌
- 程序员们,做好你手里的俩份试卷
- 程序员必备的10大健康装备! 我们要工作更要健康!
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 一篇关于程序员性格的文章第1/3页
- 8种类型极品程序员,不知你属于哪一种?
- C++联合体转换成C#结构的实现方法
- 程序员编程从初级到中级的10个秘诀
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析