这段js代码是参考了某大神的java代码。
原博客见链接 –> http://blog.csdn.net/sbitswc/article/details/50191729
javascript代码如下:
/**
* @param {string} num
* @return {boolean}
*/
var isAdditiveNumber = function(num) {
//console.log(Number(nums[0])+Number(nums[1]));
var len = num.length;
if(len<1){
return false;
}
for(var i=1;i<=len/2;i++){
for(var j=1;Math.max(i,j)<=len-i-j;j++){
if(isValid(i,j,num)){
return true;// i:第一个数字字符长度 j:第二个数字字符长度
}
}
}
return false;
function isValid(num1,num2,nums){
if(num.charAt(num1) == '0' && num2>1) return false;
if(num.charAt(0) == '0' && num1>1) return false;
var x1 = Number(nums.substring(0,num1));
var x2 = Number(nums.substring(num1,num1+num2));
var sum = "";
for(var k=num1+num2;k!=nums.length;k+=sum.length){
x2 = x2 + x1;
x1 = x2 - x1;
sum = x2.toString();//num.startsWith(sum, k)
if(nums.substring(k,k+sum.length)!=sum){
return false;
}
}
return true;
}
};
这段代码其实是用了最简单的暴力循环,不过巧妙的限制了循环条件,所以代码的执行效率还比较高的。
isValid函数判断的是,当第一个数字字符的长度为nums1,第二个数字字符为nums2的时候,原字符串是否符合题目条件。函数中的for循环用于迭代,完成整条字符串的判断。