笨阶乘----java

  1. 笨阶乘
    通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。

相反,我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。

例如,clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1。然而,这些运算仍然使用通常的算术运算顺序:我们在任何加、减步骤之前执行所有的乘法和除法步骤,并且按从左到右处理乘法和除法步骤。

另外,我们使用的除法是地板除法(floor division),所以 10 * 9 / 8 等于 11。这保证结果是一个整数。

实现上面定义的笨函数:给定一个整数 N,它返回 N 的笨阶乘。

示例 1:

输入:4
输出:7
解释:7 = 4 * 3 / 2 + 1
示例 2:

输入:10
输出:12
解释:12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/clumsy-factorial
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

试着分析:
N=1 式子:1 返回:1
N=2 式子:21 返回:2
N=3 式子:3
2/1 返回:6
N=4 式子:43/2+1 返回:7
==========以上特殊例子
==========我们看出5
4/3和65/4和76/5和98/7有一个规律,就是他们的结果是开头的最大数+1
N=5 式子:5
4/3+2-1=>6+2-1 返回:7
N=6 式子:65/4+3-21=>7+3-2 返回:8
N=7 式子:76/5+4-32/1=>8+4-6 返回:6
N=8 式子:87/6+5-43/2+1=>9+5-6+1 返回:9
N=9 式子:98/7+6-54/3+2-1=>10+6-6+2-1 返回:11
N=10 式子:109/8+7-65/4+3-21=>11+7-7+3-2 返回:12
N=11 式子:11
10/9+8-76/5+4-32/1=>12+8-8+4-6 返回:10
N=12 式子:1211/10+9-87/6+5-4*3/2+1=>13+9-9+5-6+1 返回:13
====我们可以看出N%4=0的时候返回N+1;当N%41 || N%42返回N+2;当N%43返回N-1

根据逻辑可以写出以下代码:

class Solution {
    public int clumsy(int N) {
        if (N == 1 || N == 2)
            return N;
        if (N == 3)
            return 6;
        if (N == 4)
            return 7;
        //以上特殊情况
        if (N % 4 == 0)
            return N + 1;
        if (N % 4 == 1 | N % 4 == 2)
            return N + 2;
        return N - 1;
    }
}
posted @ 2021-04-01 20:50  网抑云黑胶SVIP用户  阅读(76)  评论(0编辑  收藏  举报