题目描述: 💦
题目中给了很多限制,首先我们先来回顾基本的解法,再看限制。
🏠解法一、迭代
代码展示: 👇
class Solution {
public int sumNums(int n) {
int res = 0;
for(int i = 1; i <= n; i++)
res += i;
return res;
}
}
🏠解法二、高斯计算
代码展示: 👇
class Solution {
public int sumNums(int n) {
return (1 + n) * n / 2;
}
}
🏘️解法三、递归
代码展示: 👇
class Solution {
public int sumNums(int n) {
if(n == 1) {
return 1;
}
n += sumNums(n - 1);
return n;
}
}
🏘️解法四、逻辑运算符的短路效应
首先我们先了解一下逻辑运算符的短路效应:
常见的逻辑运算符有三种,即 “与 && ”,“或 || ”,“非 ! ” ;而其有重要的短路效应,如下所示:
if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
if(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
本题需要实现 “当 n = 1n=1 时终止递归” 的需求,可通过短路效应实现。
n > 1 && sumNums(n - 1) // 当 n = 1 时 n > 1 不成立 ,此时 “短路” ,终止后续递归
代码展示: 👇
class Solution {
int res = 0;
public int sumNums(int n) {
boolean x = n > 1 && sumNums(n - 1) > 0;
res += n;
return res;
}
}
简写:
class Solution {
public int sumNums(int n) {
boolean x = n > 1 && (n += sumNums(n - 1)) > 0;
return n;
}
}
🌈我的感受:
本题可以说完全是奔着面试去了,解法很多,主要考查你的基础功底以及对知识的灵活应用。