其实这道题目考察的并不是代码能力,而是找规律~
①首先,这是一个连续奇数的三角,第一反应是十分著名的杨辉三角,说明这都是有规律可循的,对于每一行甚至每一斜线。
②题目要求:输入数字n,计算对应行的和(就算英语阅读有问题,实例也是很容易理解的)
既然,题目要求和基本思想已经把握了,那么就要进行下一步了
③找规律:每行第一个数为--n(n-1)+1,第n行就有n个数,依次加2;
④实现:(规律已经找到了,但是还是会踩坑的~)
a.
function rowSumOddNumbers(n) {
var sum = n(n-1)+1;
for(var i=1;i<n;i++){
sum = sum +sum +2i
//代码可精简,主要突出思路错误
}
return sum;
}
这是第一版出来的思路,自己觉得完全没有问题,甚至仔细斟酌了i的取值,确保不会加错2的次数
然而,这是犯了一个非常想当然的错误,for循环中,sum被重新赋值,再次进入循环,sum已经不是从前的那个sum了,加重了呀!!!所以调试的时候,数值远远超出预算,我甚至都怀疑自己是不是不小心加了幂指数了
b.ok,重新思考,啥都不如烂笔头,开写,找泛例然后以特例进行验证
首先,num为第n行第一个数
则该行各数为:
num
num+2*1
num+2*2
num+2*3
...
num+2*(n-1);
则 该行总和 sum = num+num+21+num+22+num+23+...+num+2(n-1)--->化简为:sun=nnum+2[1+(n-1)](n-1)/2=n(num+n-1);
所以最终代码为
function rowSumOddNumbers(n) {
// TODO
var sum = n(n-1)+1;
var num = sum+n-1;
return nnum;
}
仰天长叹,这要是不写明白了,以后我想破脑袋,掉光秀发,大概也搞不懂为啥这么写代码;
原文:https://blog.csdn.net/ni_meng_/article/details/86101822