题目

Additive Number

 
    然后,如何确定递归的入口呢?即a和b如何确定? 显然,使用0是不合理的,因此,只能枚举合法的a和b,然后再调用递归算法。

实现

typedef long long int ll;
class Solution {
public:
	bool isAdditiveNumber(string num) {
		int n = num.length();
		for (int i = 1; i <= (n - 1) / 2; i++){
			if (num[0] == '0' && i >= 2)
				break;
			for (int j = i + 1; j - i <= n - j && i <= n - j; j++){
				if (num[i] == '0' && j - i >= 2)
					break;
				ll a = getNum(num, 0, i - 1);
				ll b = getNum(num, i, j - 1);
				if (helper(a, b, num.substr(j)))
					return true;
			}
		}
		return false;
	}
	ll getNum(string& str, int beg, int end){
		ll result = 0;
		while (beg <= end){
			result *= 10;
			result += str[beg] - '0';
			beg ++;
		}
		return result;
	}
	bool helper(ll a, ll b, string str){
		if (str.length() == 0)
			return true;
		ll c = a + b;
		string cstr = to_string(c);
		int k = 0;
		while (k < cstr.length()){
			if (cstr[k] != str[k])
				return false;
			k++;
		}
		return helper(b, c, str.substr(k));
	}
};

 

相关文章: