面試題64 求1 2 n

2021-10-06 17:57:37 字數 847 閱讀 1998

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。

示例 1:

輸入: n = 3

輸出: 6

示例 2:

輸入: n = 9

輸出: 45

限制:

1 <= n <= 10000
這道題目簡直是喪心病狂,基本上什麼都不讓用,只讓用加減法。不讓用迴圈最直接的想法就是使用遞迴,但是使用遞迴,遞迴要有乙個終止條件,不讓使用if如何寫這個終止條件呢?這就要使用到乙個叫做邏輯短路的概念。我來舉幾個例子:

boolean b=

5>2||

2/0;

沒錯,這個表示式我除0了,但是系統並不會報錯,這是因為或運算是從左往右掃瞄條件,只要有乙個滿足條件後面的就不會再執行了,因此不會報錯。接下來:

boolean b=

5<4&&

3/0;

同理,這條語句也不會報錯,因為前面的條件為假,對於且運算來說,有乙個是假整個表示式就都為假,不會再執行後面的判斷了,因此對於這道題來說我們也可以利用邏輯短路這一特性。

設定乙個布林變數,可以用&& ,其中乙個條件為n>0,這是遞迴終止條件,將它放在前面,當不滿足這個條件時,後面的遞迴也就不用再進行了。

class

solution

}

**很簡單,但是思路不太容易想,主要的思路還是迴圈可以用遞迴判斷,遞迴的終止條件if語句可以使用邏輯短路來替代,有一說一今天的每日一題有點東西,這道面試題真的長見識了。

面試題64 求1 2 n

求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 利用 和 的短路規則,形成if的效果,再用遞迴形成迴圈的效果,實現求和。觀察求和公式 package com.wsy public class main public st...

面試題64 求1 2 n

面試題64 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c a b a 為 true,則返回表示式 b 的 bool 值 a 為 false,則返回 false class solution a 這個是宣告。a 這個...

LeetCode面試題64 求1 2 n

在拿到題目後,我首先想到的就是遞迴,但問題出在如何處理遞迴過程中的中斷條件,在無法使用if else 的情況下,採用邏輯表示式 運算子 來做。運算子 運算子左邊的結果和右邊的結果同時為真時,結果真 運算子左邊的結果和右邊的結果同時為假時,結果為假 運算子左邊的結果和右邊的結果有乙個為假時,結果為假 ...