Additive Number
来源:互联网 发布:paxos算法 视频 编辑:程序博客网 时间:2024/05/21 11:26
Additive number is a positive integer 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:"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, 03
or 1, 02, 3
is invalid.
Given a string represents an integer, write a function to determine if it's an additive number.
Follow up:
How would you handle overflow for very large input integers?
class Solution {public: bool isAdditiveNumber(string num) { int len=num.size(); for(int i=1;i<=len/2;i++){ for(int j=1;j<=(len-i)/2;j++){ string str1=num.substr(0,i); string str2=num.substr(i,j); if(check2(str1,str2,num.substr(i+j))) return true; } } return false; } bool check(string str1,string str2,string num){ string sum=add(str1,str2); int n3=sum.size(); if(sum==num) return true; if(n3>=num.size()||sum!=num.substr(0,n3)) return false; else return check(str2,sum,num.substr(n3)); } bool check2(string str1,string str2,string num){ string sum=add(str1,str2); while(true){ if(sum==num) return true; if(sum.size()>=num.size()||sum!=num.substr(0,sum.size())) return false; num=num.substr(sum.size()); str1=str2;str2=sum; sum=add(str1,str2); } } string add(string str1,string str2){ int i1=str1.size()-1; int i2=str2.size()-1; int carry=0; string res; while(i1>=0||i2>=0){ int sum=(i1>=0?str1[i1]-'0':0)+(i2>=0?str2[i2]-'0':0)+carry; carry=sum/10; res.push_back(sum%10+'0'); i1--;i2--; } if(carry) res.push_back(carry+'0'); reverse(res.begin(),res.end()); return res; }};
0 0
- Additive number
- Additive Number
- Additive Number
- Additive Number
- Additive Number | Leetcode
- [LeetCode]Additive Number
- leetcode 306 : Additive Number
- Additive Number-LeetCode
- [Leetcode]Additive Number
- [LeetCode306] Additive Number
- Leetcode196: Additive Number
- Leetcode: Additive Number
- LeetCode Additive Number
- leetcode:Additive Number
- leetcode:Additive Number
- leetcode - Additive Number
- [leetcode] 306. Additive Number
- [LeetCode]306. Additive Number
- iOS自定义tabBar手势侧滑返回(仿系统)
- Hibernate的批量处理
- JSONModel解析数据成Model
- HDOJ 1232 畅通工程 (并查集)
- python中生成二维码图片
- Additive Number
- 在VM上安装CentOS minimal版
- HTML DOM (一):DOM理解
- 微软算法100道题------输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- [Unity通信]一个基于socket的3DARPG网络游戏(一):建立连接和事件分发
- android控件之AutoCompleteTextView下拉列表显示一片空白
- HDU 2181-哈密顿绕行世界问题(裸dfs)
- codeforce 577 B. Modulo Sum
- JavaSE__Jdbc关闭