Javascript 三位数的最大和
Javascript greatest sum of triple digits
我想用 javascript 编写一个函数,计算给定正数的 3 个连续数字的最大总和。
因此,例如 124999012 将计算为 27。
我已经写了一个函数来计算一个数字的数字和:
function sumDigits(n)
{
var str = n.toString();
var result = 0;
for(var i = 0; i < str.length; i++)
{
result = result + parseInt(str.charAt(i));
}
return result;
}
你会想要这样的东西,它使用 Array.splice
和 Math.max
function highestNum(n){
var arr = [], nArr = (n+"").split("");
while(nArr.length > 0)
arr.push(nArr.splice(0,3).reduce(function(t, c){ return +t + +c }, 0));
return Math.max.apply(null, arr);
}
它所做的是,首先将数字转换为字符串,然后使用 Array.splice
,将数组拆分为 3 个元素的片段,然后使用 Array.reduce
求和你推入另一个数组的那三个数字。然后您使用 Math.max
和 Function.apply
来获得您使用 return
运算符 return 的最高值。
function sumDigits(n)
{
var str = n.toString();
var result = 0;
var temp=0;
//for safety check length of the string
// if it is not longer than 3 characters then just sum them up and return
if (str.length<=3)
{
for(var i = 0; i < Math.Min(3,str.length); i++)
result += parseInt(str.charAt(i));
}
else
{
//now look for biggest 3 consecutive numbers,
//you wanna sum up 3 digits starting at index 0, and compare it with the max value you have calculated so far
for(var i = 0; i < str.length-3; i++)
{
//calculate the sum of 3 consecutive numbers starting at index i
temp = parseInt(str.charAt(i)) + parseInt(str.charAt(i+1)) + parseInt(str.charAt(i+2));
//compare it to the current max, if it is greater than the current max, set it as the result
if (temp>result)
result = temp;
}
}
return result;
}
你可以这样做:
function sumDigits(number)
{
var numberString = "" + number;
var max = -1;
for(var i = 0; i < numberString.length - 3; i++)
{
var number1 = parseInt(numberString.charAt(i));
var number2 = parseInt(numberString.charAt(i + 1));
var number3 = parseInt(numberString.charAt(i + 2));
var tempTotal = number1 + number2 + number3;
if(tempTotal > max)
{
max = tempTotal;
}
}
window.alert("" + max);
return max;
}
您可以从前三位数字开始循环,直到测试完 3 个连续数字的所有组合。只需将 3 个数字加在一起,如果它大于当前最大值,则将当前最大值设置为温度值。
我有点无聊所以我也做了我自己的算法。这是我的解决方案:
function sumDigits(n) {
return Math.max.apply(null, Array.prototype.map.call("" + n, function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]]
.reduce(function (prev, curr) { return prev + (curr || 0) });
}));
}
当然,the fiddle。
一步一步:
1) 将数组转换为三个元素的数组,当前元素和接下来的2个元素:
Array.prototype.map.call(n.toString(), function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]];
});
2) 获取数组中每一项的三个元素的总和:
item.reduce(function (prev, curr) { return prev + (curr || 0) });
curr
对于数组的最后一个元素将是未定义的,因此它可能会转换为 0
.
3) 获取最后一个数组的 max
:
Math.max.apply(null, array);
就是这样!
在这种情况下,正则表达式可能效果很好。我不是 RegExp 专家,有人可能会指出这样做的底线吗?
Javascript
var num = 12224999011112,
matches = num.toString().match(/(.){2}/g),
sum = 0;
if (matches) {
sum = Math.max.apply(null, matches).toString().charAt() * 3;
}
document.body.appendChild(document.createTextNode(sum));
首先,将数字转换为字符串,以便您可以使用 RegExp。然后我们匹配所有出现的 3 个并发字符。如果我们有任何匹配,那么我们选择数学上最大的。我们将其转换为字符串,取第一个字符并将其乘以 3。
我想用 javascript 编写一个函数,计算给定正数的 3 个连续数字的最大总和。
因此,例如 124999012 将计算为 27。
我已经写了一个函数来计算一个数字的数字和:
function sumDigits(n)
{
var str = n.toString();
var result = 0;
for(var i = 0; i < str.length; i++)
{
result = result + parseInt(str.charAt(i));
}
return result;
}
你会想要这样的东西,它使用 Array.splice
和 Math.max
function highestNum(n){
var arr = [], nArr = (n+"").split("");
while(nArr.length > 0)
arr.push(nArr.splice(0,3).reduce(function(t, c){ return +t + +c }, 0));
return Math.max.apply(null, arr);
}
它所做的是,首先将数字转换为字符串,然后使用 Array.splice
,将数组拆分为 3 个元素的片段,然后使用 Array.reduce
求和你推入另一个数组的那三个数字。然后您使用 Math.max
和 Function.apply
来获得您使用 return
运算符 return 的最高值。
function sumDigits(n)
{
var str = n.toString();
var result = 0;
var temp=0;
//for safety check length of the string
// if it is not longer than 3 characters then just sum them up and return
if (str.length<=3)
{
for(var i = 0; i < Math.Min(3,str.length); i++)
result += parseInt(str.charAt(i));
}
else
{
//now look for biggest 3 consecutive numbers,
//you wanna sum up 3 digits starting at index 0, and compare it with the max value you have calculated so far
for(var i = 0; i < str.length-3; i++)
{
//calculate the sum of 3 consecutive numbers starting at index i
temp = parseInt(str.charAt(i)) + parseInt(str.charAt(i+1)) + parseInt(str.charAt(i+2));
//compare it to the current max, if it is greater than the current max, set it as the result
if (temp>result)
result = temp;
}
}
return result;
}
你可以这样做:
function sumDigits(number)
{
var numberString = "" + number;
var max = -1;
for(var i = 0; i < numberString.length - 3; i++)
{
var number1 = parseInt(numberString.charAt(i));
var number2 = parseInt(numberString.charAt(i + 1));
var number3 = parseInt(numberString.charAt(i + 2));
var tempTotal = number1 + number2 + number3;
if(tempTotal > max)
{
max = tempTotal;
}
}
window.alert("" + max);
return max;
}
您可以从前三位数字开始循环,直到测试完 3 个连续数字的所有组合。只需将 3 个数字加在一起,如果它大于当前最大值,则将当前最大值设置为温度值。
我有点无聊所以我也做了我自己的算法。这是我的解决方案:
function sumDigits(n) {
return Math.max.apply(null, Array.prototype.map.call("" + n, function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]]
.reduce(function (prev, curr) { return prev + (curr || 0) });
}));
}
当然,the fiddle。
一步一步:
1) 将数组转换为三个元素的数组,当前元素和接下来的2个元素:
Array.prototype.map.call(n.toString(), function (s, ix) {
return [+s, +n.toString()[ix + 1], +n.toString()[ix + 2]];
});
2) 获取数组中每一项的三个元素的总和:
item.reduce(function (prev, curr) { return prev + (curr || 0) });
curr
对于数组的最后一个元素将是未定义的,因此它可能会转换为 0
.
3) 获取最后一个数组的 max
:
Math.max.apply(null, array);
就是这样!
在这种情况下,正则表达式可能效果很好。我不是 RegExp 专家,有人可能会指出这样做的底线吗?
Javascript
var num = 12224999011112,
matches = num.toString().match(/(.){2}/g),
sum = 0;
if (matches) {
sum = Math.max.apply(null, matches).toString().charAt() * 3;
}
document.body.appendChild(document.createTextNode(sum));
首先,将数字转换为字符串,以便您可以使用 RegExp。然后我们匹配所有出现的 3 个并发字符。如果我们有任何匹配,那么我们选择数学上最大的。我们将其转换为字符串,取第一个字符并将其乘以 3。