题目:求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;*/
}
}