Leetcode no. 306
来源:互联网 发布:淘宝店铺怎么样取名 编辑:程序博客网 时间:2024/05/01 20:00
306. Additive Number
Additive 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:"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 containing only digits '0'-'9'
, write a function to determine if it's an additive number.
Follow up:
How would you handle overflow for very large input integers?
public class Solution { public boolean isAdditiveNumber(String num) { for (int i = 1; i <= (num.length()>>1); i++) { for (int j = 1; j <= (num.length()>>1); j++) { String first= num.substring(0,i); if (2*i+j>num.length() || 2*j+i>num.length()) break; String second= num.substring(i,i+j); String rest= num.substring(i+j); if (checkAdditive(first, second, rest)==true) return true; } } return false; } private boolean checkAdditive(String s1, String s2, String s){ if ((s1.length()>1 && s1.charAt(0)=='0') || (s2.length()>1 && s2.charAt(0)=='0')) return false; String add= addUp(s1,s2); if (add.equals(s)) return true; if (s.length()<add.length()) return false; if (!s.substring(0, add.length()).equals(add)) return false; return checkAdditive(s2, add, s.substring(add.length())); } private String addUp(String s1, String s2){ StringBuilder sb= new StringBuilder(); int i= s1.length()-1, j= s2.length()-1, flag=0; while (i>=0 || j>=0 || flag>0){ int add= flag+ ((i>=0)? s1.charAt(i--)-'0':0)+((j>=0)? s2.charAt(j--)-'0':0); sb.insert(0, add%10); flag=add/10; } return sb.toString(); }}
0 0
- Leetcode no. 306
- LeetCode No.11 ~No.12
- Leetcode NO.78 Subsets
- Leetcode NO.77 Combinations
- Leetcode NO.46 Permutations
- 【leetcode】No. 235 LCABST
- LeetCode no. 35
- Leetcode no. 37
- Leetcode no. 279
- Leetcode no. 335
- Leetcode no. 283
- Leetcode no. 181 (sql)
- Leetcode no. 40
- Leetcode no. 238
- Leetcode no. 26
- Leetcode no. 80
- Leetcode no. 228
- Leetcode no. 313
- 有时候需要做报表时,如何将一个字段年份划分成12个月份呢?
- Linux 常用命令(二)
- quick cocos2dx脚本加密
- ES6学习笔记(四)--数值与数组
- 过去琐碎
- Leetcode no. 306
- 设计模式之单例模式的七种写法
- php中多态的一些理解
- 二、call和apply的用法(详细介绍)
- iOS开发之单例使用(宏)
- 七牛-音视频拼接注释
- Spring 攻略第001讲
- Unity+HTC Vive開発メモ
- AT&T与Intel汇编语法的比较