Leetcode 306 Solution

This article provides solution to leetcode question 306 (additive-number)

https://leetcode.com/problems/additive-number

Solution

class Solution {
public:
    bool isAdditiveNumber(string num) {
        for (int i = 1; i < num.size() && i < 63; i++)
        {
            string num1 = num.substr(0, i);
            int64_t inum1 = atoll(num1.c_str());

            if (inum1 != 0 && num1[0] == '0')
                continue;

            for (int j = 1; i + j < num.size() && j < 63; j++)
            {
                string num2 = num.substr(i, j);
                int64_t inum2 = atoll(num2.c_str());

                if (inum2 != 0 && num2[0] == '0')
                    continue;

                int k = i + j;

                int64_t a = inum1;
                int64_t b = inum2;

                printf("%d %d\n", i, j);
                while (k < num.size())
                {
                    int64_t c = a + b;

                    string strc = to_string(c);

                    if (num.substr(k, strc.size()) != strc)
                        break;

                    k += strc.size();
                    a = b;
                    b = c;
                }

                if (k == num.size())
                    return true;
            }
        }

        return false;
    }
};