第二个数字必须是前一个数字的平方。第一个数字只能是0- 9。
例如,2439将返回'true‘,因为4是2的平方,9是3的平方。
我真的不知道该怎么做。它应该是一个递归函数,但如何在没有递归的情况下实现它的示例也会很有帮助。
发布于 2015-01-09 00:45:09
我会尝试这样的东西:
function isOrdered(input){
var position = 0;
while(position<input.length-2)
{
var currentFirstNumber = parseInt(input[position]);
if(currentFirstNumber<=2) {
if (Math.sqrt(parseInt(input[position + 1])) !== currentFirstNumber)
return false;
else
position+=2;
}
if(currentFirstNumber>=4 && currentFirstNumber<=9)
{
var squared = input.substring(position+1,position+3);
if(Math.sqrt(parseInt(squared))!==currentFirstNumber)
return false;
else
position=position+3;
}
}
return true;
}
console.log(isOrdered("2439")); // outputs true
console.log(isOrdered("39416")); // outputs true
console.log(isOrdered("1624")); // outputs false我将数字作为字符串传递给函数。
发布于 2015-01-09 01:16:25
正如评论部分所提到的,OP说“第一次”被限制在0..9。因此,完成此操作的最简单方法是使用power函数,而不是square root函数。
更新:抱歉,您要的是JavaScript代码。小心使用FIRST CALL。如果您手动将最后一个位置传递给函数,它将返回true。
function verification(number, position){
var str = String(number); // Cast number to String
if(str.length > position){ // Verify valid position
var value = str.substr(position, 1); // take the 'first' value
var pow = Math.pow(value, 2); // Calculate the power
// Verify if the next value is equivalent to the power
if(str.indexOf(pow, position) == position + 1){
// Recursive call to verify the next position
return verification(number, position + String(pow).length + 1);
} else {
// If not equivalent, you found an inconsistency.
return false;
}
// If you ran it until you reached the last position, you're good to go.
}else if(str.length == position){
return true;
}
}
console.log(verification(39416, 0)); // True
console.log(verification(39415, 0)); // True
console.log(verification(981524, 0)); // false
console.log(verification(981525, 0)); // true
console.log(verification(98525, 0)); // false发布于 2015-01-09 01:19:04
看一下这个递归函数
function detectOrder(input)
{
var input = input.toString()
var first = input.substr(0,1);
var power = Math.pow(parseInt(first), 2);
var powerLength = power.toString().length;
if ( parseInt(input.substr(1, powerLength)) == power )
{
if (input.length <= 1+powerLength)
{
return true;
}
else
{
return detectOrder(input.substr(1+powerLength));
}
}
else
{
return false;
}
}https://stackoverflow.com/questions/27845178
复制相似问题