跳台阶
错误写法:
class Solution { public: int jumpFloor(int number) { if(number <= 0) return 0; int result[2] = {1,2}; else if(number <= 2) return result[number-1]; int num1 = 1; int num2 = 2; int num3 = 0; for(int i = 3;i <= number;i++){ num3 = num1 + num2; num1 = num2; num2 = num3; } return num3; } };
else if这一句会报错,else if应该是紧跟在if语句后面,中间不能插入其他语句,不然else if不知道之前的if是哪一个。
正确写法:
class Solution { public: int jumpFloor(int number) { int result[2] = {1,2}; if(number <= 0) return 0; else if(number <= 2) return result[number-1]; int num1 = 1; int num2 = 2; int num3 = 0; for(int i = 3;i <= number;i++){ num3 = num1 + num2; num1 = num2; num2 = num3; } return num3; } };
这里要强调一下else if与if 的不同。这段代码,把else if换成if也是正确的,但并不代表else if和if是一样的。
现在假设把number小于0情况后面的语句换成不是return,而是其他语句,并且假设number = -1,。
1.else if的情况:number只执行number < 0这种情况的语句,不会进入number < 2这种情况去执行语句。虽然else if只写了一个number <= 2,但因为有else,实际上
的条件是0 < number <=2。
2.if的情况:number执行完number < 0的语句,顺序执行number < 2的语句。这里的number < 2就是所有小于2的number。
之所以这里一样,是因为number < 0的时候直接return,结束了整个程序。