• 306. Additive Number java solutions


    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?

    Credits:
    Special thanks to @jeantimex for adding this problem and creating all test cases.

    Subscribe to see which companies asked this question

     1 public class Solution {
     2     public boolean isAdditiveNumber(String num) {
     3         int len = num.length();
     4         for(int i = 1; i <= len/2; i++){
     5             for(int j = 1; Math.max(i,j) <= len-i-j;j++){
     6                 if(isValid(i,j,num)) return true;
     7             }
     8         }
     9         return false;
    10     }
    11     
    12     public boolean isValid(int i,int j,String num){
    13         if(num.charAt(0) == '0' && i > 1) return false;
    14         if(num.charAt(i) == '0' && j > 1) return false;
    15         String sum;
    16         Long one = Long.parseLong(num.substring(0,i));
    17         Long two = Long.parseLong(num.substring(i,i+j));
    18         for(int s = i+j; s < num.length(); s += sum.length()){
    19             two = two + one;
    20             one = two - one;
    21             sum = two.toString();
    22             if(!num.startsWith(sum,s)) return false;
    23         }
    24         return true;
    25     }
    26 }

    递归解法:

    https://discuss.leetcode.com/topic/50580/java-recursive-simple-dfs-solution

    https://discuss.leetcode.com/topic/29856/java-recursive-and-iterative-solutions

  • 相关阅读:
    1月10日寻找“岭南九寨沟”韶关始兴深度水
    LR11录制脚本时无法弹出IE的解决方法
    robot selenium alert/confirm处置系统弹出框
    java+eclipse+selenium自动化
    测试用例水杯
    selenium IDE认识IDE面板
    angularJS学习笔记之——搭建学习环境
    使用Angularjs的ngcloak指令避免页面乱码
    angularjs的$on、$emit、$broadcast
    angularjs 的笔记
  • 原文地址:https://www.cnblogs.com/guoguolan/p/5666286.html
Copyright © 2020-2023  润新知