【攻克剑指offer】第6天《求1+2+…+n》
求1+2+…+n
题目描述: 💦
👉题目链接👈
题目中给了很多限制,首先我们先来回顾基本的解法,再看限制。
🏠解法一、迭代
代码展示: 👇
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 为 falseif(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; }}
🌈我的感受:
本题可以说完全是奔着面试去了,解法很多,主要考查你的基础功底以及对知识的灵活应用。