> 文档中心 > 【攻克剑指offer】第6天《求1+2+…+n》

【攻克剑指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;    }}

🌈我的感受:

  本题可以说完全是奔着面试去了,解法很多,主要考查你的基础功底以及对知识的灵活应用。
在这里插入图片描述