LeetCode(306) Addtive Number解题报告
2015-12-04 11:59
495 查看
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.
“199100199” is also an additive number, the additive sequence is: 1, 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?
解题思路:
此题重点在于枚举取出第一个和第二个数,因为第一个数的取值位数不会超过num长度的一半,所以可以让i循环到(num.length + 1) / 2,然后添加辅助函数,利用递归完成整个addtiveNumber的判断,返回结果。
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?
解题思路:
此题重点在于枚举取出第一个和第二个数,因为第一个数的取值位数不会超过num长度的一半,所以可以让i循环到(num.length + 1) / 2,然后添加辅助函数,利用递归完成整个addtiveNumber的判断,返回结果。
public static boolean isAdditiveNumber(String num) { String first = null; String second = null; for(int i = 1; i < num.length(); i++) for(int j = i+1; j < num.length(); j++){ first = num.substring(0, i); second = num.substring(i,j); if(isValid(num,first,second,j)) return true; } return false; } public static boolean isValid(String num,String first,String second,int start){ if(num.length() == start) return true; long a = Long.parseLong(first); long b = Long.parseLong(second); if(!("" + a).equals(first) || !("" + b).equals(second)) return false; long c = a + b; String res = "" + c; if((res.length() + start) > num.length()) return false; if(num.substring(start,start + res.length()).equals(res)){ return isValid(num,second,res,(start + res.length())); } return false; }
相关文章推荐
- 南阳理工 动物统计
- 转换加密工具类-MD5
- 为什么给一个字符串分配内存再初始化后,其大小一直为8?
- 南阳理工 动物统计
- 探究CRC32算法实现原理-why table-driven implemention
- PHP基础--字符串操作和运算符
- Java 中的堆和对象的区别
- [工具类]DataTable与泛型集合List互转
- XUtils框架中HttpUtils使用Get请求时总是返回相同信息的问题解决,xutilshttputils
- CentOS 7 网络配置
- 261. Graph Valid Tree
- Android中的WebView布局点击事件的方法
- android中View.measure方法的源码注解
- str_split与explode
- txt阅读器
- 数字功放
- Tank走迷宫(某比赛决赛题)
- Linux学习笔记(十四、压缩命令)
- 【风马一族_日常灵感】会飞的汽车之理论基础探索
- 提供均衡服务的中间件——高可用