开发者社区> 游客z3jcatjk57fiu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

每日算法系列【LeetCode 1006】笨阶乘

简介: 笨阶乘
+关注继续查看

题目描述


通常,正整数 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

提示


image.png

题解


笨方法我就不写了,按照运算顺序模拟一遍,数量比较少的话,应该也不会超时。


image.png

image.pngimage.png

代码


c++

class Solution {
    public:   
    int clumsy(int N) {  
        int q = N & 3;  
        int a[5] = {0, 1, 2, 6, 7}; 
        int d[4] = {1, 2, 2, -1};  
        return N>=5 ? N+d[q] : a[N];  
    }
};

python

class Solution:  
    def clumsy(self, N: int) -> int:  
        q = N & 3   
        a = [0, 1, 2, 6, 7]   
        d = [1, 2, 2, -1]   
        return N+d[q] if N>=5 else a[N]

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
每日算法系列【LeetCode 1053】交换一次的先前排列
给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。
15 0
每日算法系列【LeetCode 329】矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
18 0
每日算法系列【LeetCode 829】连续整数求和
给定一个正整数 N ,试求有多少组连续正整数满足所有数字之和为 N ?
14 0
每日算法系列【LeetCode 927】三等分
给定一个由 0 和 1 组成的数组 A,将数组分成 3 个非空的部分,使得所有这些部分表示相同的二进制值。
30 0
每日算法系列【LeetCode 943】最短超级串
给定一个字符串数组 A,找到以 A 中每个字符串作为子字符串的最短字符串。 我们可以假设 A 中没有字符串是 A 中另一个字符串的子字符串。
22 0
每日算法系列【LeetCode 328】奇偶链表
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。
16 0
每日算法系列【LeetCode 684】冗余连接
在本问题中, 树指的是一个连通且无环的无向图。 输入一个图,该图由一个有着 个节点(节点值不重复 )的树及一条附加的边构成。附加的边的两个顶点包含在 到 中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一个边的元素是一对 ,满足 ,表示连接顶点 和 的无向图的边。 返回一条可以删去的边,使得结果图是一个有着 个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 应满足相同的格式.
13 0
每日算法系列【LeetCode 881】救生艇
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
30 0
leetcode算法94.二叉树的中序遍历
当给定一个二叉树的根节点 root ,如何返回它的中序遍历?本文带大家解决这个问题。
18 0
【算法千题案例】每日LeetCode打卡——90.转换成小写字母
📢前言 🌲原题样例:转换成小写字母 🌻C#方法:新空间遍历 🌻Java 方法:哈希表 💬总结
35 0
217
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载