劍指 offer之求1+2+3+...+n_Java

題目:求1+2+3+…+n
題目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

解題思路:
1.需利用邏輯與的短路特性實現遞歸終止。
2.當n==0時,(n>0)&&((sum+=Sum_Solution(n-1))>0)只執行前面的判斷,爲false,然後直接返回0;
3.當n>0時,執行sum+=Sum_Solution(n-1),實現遞歸計算Sum_Solution(n)。

代碼實現:

public class Solution {
    public int Sum_Solution(int n) {
        int sum=n;
		//sum+=n>0?Sum_Solution(n-1):0;
        boolean res=(n>0) &&(sum+=Sum_Solution(n-1))>0;
		return sum;
    }
}

相同思路的題:無緩存交換
題目描述:
題目描述
請編寫一個函數,函數內不使用任何臨時變量,直接交換兩個數的值。
給定一個int數組AB,其第零個元素和第一個元素爲待交換的值,請返回交換後的數組。
測試樣例:
[1,2]
返回:[2,1]

解題思路:
(1)加法: a=a+b; b=a-b;a=a-b;
(2)異或: a=a異或b;b=a異或b;a=a異或b;

import java.util.*;

public class Exchange {
    public int[] exchangeAB(int[] AB) {
        // write code here
        //加法實現
        AB[0]=AB[0]+AB[1];
        AB[1]=AB[0]-AB[1];
        AB[0]=AB[0]-AB[1];
        return AB;
        /*
        //異或實現
        AB[0]=AB[0]^AB[1];
        AB[1]=AB[0]^AB[1];
        AB[0]=AB[0]^AB[1];
        return AB;*/
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章