LeetCode in Kotlin

306. Additive Number

Medium

An additive number is a string whose digits can form an 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.

Given a string containing only digits, return true if it is an additive number or false otherwise.

Note: Numbers in the additive sequence cannot have leading zeros, so sequence 1, 2, 03 or 1, 02, 3 is invalid.

Example 1:

Input: “112358”

Output: true

Explanation: 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

Example 2:

Input: “199100199”

Output: true

Explanation: The additive sequence is: 1, 99, 100, 199. 1 + 99 = 100, 99 + 100 = 199

Constraints:

Follow up: How would you handle overflow for very large input integers?

Solution

class Solution {
    fun isAdditiveNumber(num: String): Boolean {
        if (num.isEmpty() || num.length < 3) {
            return false
        }

        fun isInvalid(s: String): Boolean {
            return s[0] == '0' && s.length > 1
        }

        fun backtrack(first: Long, second: Long, startIndex: Int): Boolean {
            val third = (first + second).toString()
            if (num.substring(startIndex).startsWith(third)) {
                if (third.length == num.length - startIndex) return true
                return backtrack(second, third.toLong(), startIndex + third.length)
            }
            return false
        }

        for (i in 1 until num.length) {
            val first = num.substring(0, i)
            if (isInvalid(first)) break
            for (j in i + 1 until num.length) {
                val second = num.substring(i, j)
                if (isInvalid(second)) break
                if (backtrack(first.toLong(), second.toLong(), j)) return true
            }
        }
        return false
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy