Leetcode196: Additive Number
2015-12-15 21:18
295 查看
dditive number is a string whose digits can form additive sequence.
A valid additive sequence should contain at least three numbers. Except for the first two numbers, each subsequent number in the sequence must be the sum of the preceding two.
For example:
also an additive number, the additive sequence is:
Note: Numbers in the additive sequence cannot have leading zeros, so sequence
Given a string containing only digits
additive number.
A valid additive sequence should contain at least three numbers. Except for the first two numbers, each subsequent number in the sequence must be the sum of the preceding two.
For example:
"112358"is an additive number because the digits can form an additive sequence:
1, 1, 2, 3, 5, 8.
1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
"199100199"is
also an additive number, the additive sequence is:
1, 99, 100, 199.
1 + 99 = 100, 99 + 100 = 199
Note: Numbers in the additive sequence cannot have leading zeros, so sequence
1, 2, 03or
1, 02, 3is invalid.
Given a string containing only digits
'0'-'9', write a function to determine if it's an
additive number.
class Solution { public:
//两个字符串相加 string strAdd(string &v1, string &v2){ string res = ""; int carry = 0; int len1 = v1.size(), len2 = v2.size(); for(int i = len1-1, j = len2-1; i >= 0 || j >= 0; i--, j--){ int n1 = (i >= 0) ? v1[i]-'0' : 0; int n2 = (j >= 0) ? v2[j]-'0' : 0; res = to_string((n1 + n2 + carry) % 10) + res; carry = (n1 + n2 + carry) > 9; } return (carry) ? "1" + res : res; } //回溯法,比较v1+v2的值是否在num之后出现,如果出现则继续往后比较v2+sumstr的值。。。 bool isAdditive(string &num, string v1, string v2, int idx, int n){ string sumStr = strAdd(v1, v2); if(num.compare(idx, sumStr.size(), sumStr) == 0) return (idx + sumStr.size() >= n || isAdditive(num, v2, sumStr, idx+sumStr.size(), n)); else return false; } //从首位开始尝试,一旦found=true则存在 bool isAdditiveNumber(string num) { int n = num.size(); bool found = 0; for(int len1 = 1; len1 <= (n/2); len1++){ for(int len2 = 1; len2 <= (n/2); len2++){ found = isAdditive(num, num.substr(0, len1), num.substr(len1, len2), len1+len2, n); if(found) return true; } } return false; } };
相关文章推荐
- Linux 下的Makefile(二)
- HDU 1208 Pascal's Travels
- USACO1.1 PROB Your Ride Is Here 比较分析
- iOS开发--Block容易造成循环引用
- 实现图片加文字简介的两种方式
- SurfaceView
- IOS网络开发(一)
- 每日一篇:判断水仙花数。
- 安卓学习记录-java-day1
- jenkins通过配置ansible传输文件,并且调度服务
- ubuntu修改hosts文件 跳过DNS解析实现服务器定向登录(google,FB,TW等)
- 20135337——信息安全设计基础第十四周学习笔记
- GCD
- linux基础篇
- android 使用ThumbnailUtils类获取图片、视频的缩略图
- RFID扫描APP--source2
- HDU 1065 I Think I Need a Houseboat 计算几何
- 利用UGUI实现 显示/隐藏密码 功能
- leetcode:112 Path Sum-每日编程第二十七题
- 哈哈