Additive Number

题目描述:

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.

Given a string containing only digits '0'-'9', write a function to determine if it's an additive number.

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

Follow up:

How would you handle overflow for very large input integers?

思路:就是将整个字符串分割为一个一个的数字,在分割的过程中判断是否符合条件,如果有符合的情况,则正确;如果所有分割情况都不符合条件则错误。

#include<cstdio>
#include<string>
#include<vector>
#include<stdlib.h>
using namespace std;

bool check(string num,int start,vector<long long>& nums,int count)
{
	if(count==num.length())
	{
		if(nums.size()>2)
		{
//			for(int i=0;i<nums.size();i++)
//			    printf("%lld ",nums[i]);
//			printf("\n");    
			return true;
		}
		else
		    return false;    
	}		
	else
	{
		for(int i=1;i+start<=num.length();i++)
		{
			long long number = atoll(num.substr(start,i).c_str());
			//分割成的数字不能以0开头 
			if(number!=0&&atoll(num.substr(start,1).c_str())==0)
			    return false;    
			if(nums.size()>=2)
			{
				long long num1 = nums[nums.size()-1];
				long long num2 = nums[nums.size()-2];				
				if(number!=num1+num2)
					continue;
			}    		
			nums.push_back(number);
			if(check(num,start+i,nums,count+i))
			    return true;
			nums.pop_back();	        
		}
		return false;
	}
}
bool isAdditiveNumber(string num) 
{	
	if(num.length()<3)	
        return false;		   
	vector<long long> nums;
	return check(num,0,nums,0);
}
int main(){
	string num = "199100199";
	printf("%d",isAdditiveNumber(num));
	return 0;
}


猜你喜欢

转载自blog.csdn.net/numbstorm/article/details/80950645
今日推荐