求 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 的情況下,採用邏輯表示式 運算子 來做。運算子 運算子左邊的結果和右邊的結果同時為真時,結果真 運算子左邊的結果和右邊的結果同時為假時,結果為假 運算子左邊的結果和右邊的結果有乙個為假時,結果為假 ...