笔试题分析-3

话说,为啥我的牛客网一直打不开?网站静态文件加载出错什么鬼?这不应该是DNS的问题么。。学校网不应该会出现这种问题吧。。

题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。个人感觉这种题比较有意思呀,像前段时间看过一个算加法但是不让使用加减乘除的题也比较有意思。。这种题一般解法有很多种,可以先向递归上考虑,毕竟这种,一看1+2+3+到n的,递归肯定是优先考虑的一种思路。在这种类型的问题上,逻辑与与逻辑或也是一种思路,&&和||在平常编程中我是没用过的。。只有在做题的时候会考虑一下,也不是太熟悉在这里可以用一下。这道题有很多解法。。我当时用了幂函数。。因为当时想不起来逻辑与和逻辑或。。,

思路1:递归(别人做的。。)

class Solution {
public:    
int Sum_Solution(int n) {        int ans = n;         ans && (ans += Sum_Solution(n - 1));         return ans;     }
};

逻辑与&&的运算成立规则,是两个都为真(true)时,结果才为真(true),这个程序整体思路是可以理解的,主要是有个循环截止条件,这里巧妙地运用了逻辑与的短路原则,使程序可以完美达到题目要求,简洁优美。当然也可以看一下,这个程序的复杂度是O(n),似乎有些。。

思路2:鸡贼幂函数

public class Solution {
    public int Sum_Solution(int n) {
        int jieguo;
        jieguo=(int)(Math.pow(n,2)+n)>>1;
        return jieguo;
    }
}

讲道理。。是满足题目要求了,至于说函数里用了啥。。。反正是PASS了(尴尬)。这个方法是没什么参考价值的,第一个还可以,复习一波&&,||。

运行时间: 31 ms 占用内存:503K

posted @ 2017-03-19 15:17  -zzmher  阅读(139)  评论(0编辑  收藏  举报