【python】Leetcode每日一题-笨阶乘
【python】Leetcode每日一题-笨阶乘
【题目描述】
通常,正整数 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
提示:
1. 1 <= N <= 10000
2. -2^31 <= answer <= 2^31 - 1 (答案保证符合32位整数。)
【分析】
思路
处理好前四位,后面的遵循
- * / +规则,同时封装好处理冗余几位的运算,适时调用即可。AC代码
class Solution:
def clumsy(self, N: int) -> int:
if N < 4:
return self.less4(N)
re = N * (N -1) // (N - 2) + (N - 3)
for i in range(N - 4, 0, -4):
if i < 4:
re = re - self.less4(i)
else:
re = re - i * (i - 1) // (i - 2) + (i - 3)
return re def less4(self, n):
if n == 3:
return 3 * 2
elif n == 2:
return 2
else:
return 1
栈模拟
自己也算是见过很多用栈写的题了,但是还是不能第一时间想到栈。
思路:
利用
index标记* / + -* => stack.push(stack.pop() * N);
/ => stack.push(stack.pop() / N);
+ => stack.push(N);
- => stack.push(-N);
最后求栈内元素和
\[10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 \\
\Longleftrightarrow \\
10 * 9 / 8 + 7 + (- 6) * 5 / 4 + 3 + (- 2) * 1
\]class Solution {
public int clumsy(int N) {
Deque<Integer> stack = new LinkedList<Integer>();
stack.push(N);
N--; int index = 0; // 用于控制乘、除、加、减
while (N > 0) {
if (index % 4 == 0) {
stack.push(stack.pop() * N);
} else if (index % 4 == 1) {
stack.push(stack.pop() / N);
} else if (index % 4 == 2) {
stack.push(N);
} else {
stack.push(-N);
}
index++;
N--;
} // 把栈中所有的数字依次弹出求和
int sum = 0;
while (!stack.isEmpty()) {
sum += stack.pop();
}
return sum;
}
}
数学取巧就略了吧!
【python】Leetcode每日一题-笨阶乘的更多相关文章
- 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素
[python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...
- 【python】Leetcode每日一题-删除有序数组中的重复项
[python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...
- 【python】Leetcode每日一题-存在重复元素3
[python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...
- 【python】Leetcode每日一题-扰乱字符串
[python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- 【python】Leetcode每日一题-打家劫舍2
[python]Leetcode每日一题-打家劫舍2 [题目描述] 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋 ...
- 【python】Leetcode每日一题-二叉搜索树节点最小距离
[python]Leetcode每日一题-二叉搜索树节点最小距离 [题目描述] 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例1: 输入:root = [4 ...
- 【python】Leetcode每日一题-最大数
[python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...
- 【python】Leetcode每日一题-丑数2
[python]Leetcode每日一题-丑数2 [题目描述] 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例1: 输入:n = ...
随机推荐
- 攻防世界 reverse SignIn
SignIn 2019_SUCTF __int64 __fastcall main(__int64 a1, char **a2, char **a3) { char mod; // [rsp+0 ...
- java例题_49 计算子串出现的次数
1 /*49 [程序 49 子串出现的个数] 2 题目:计算字符串中子串出现的次数 3 */ 4 5 /*分析 6 * 1.子串的出现是有标志的,如" ",*,#或者其他 7 * ...
- 使用Drone构建Docker映像
使用Drone构建Docker映像 实践所用软件: Git Gogs Drone Docker 私有镜像仓库 实践链接:https://www.katacoda.com/courses/cicd/bu ...
- Logstash生产环境实践手册(含grok规则示例和ELKF应用场景)
ELKF应用场景: 1) datasource->logstash->elasticsearch->kibana 2) datasource->filebeat->log ...
- 【Papers】Robust Lane Detection via Expanded Self Attention 论文解读
论文题目:Robust Lane Detection via Expanded Self Attention 链接地址:https://arxiv.org/abs/2102.07037 文章核心想要解 ...
- 【10.5NOIP普及模拟】sum
[10.5NOIP普及模拟]sum 文章目录 [10.5NOIP普及模拟]sum 题目描述 输入 输出 输入输出样例 样例输入 样例输出 解析 code 题目描述 小x有很多糖果,分成了 N 堆,排成 ...
- Flowable与springBoot项目整合及出现的问题
Flowable与springBoot项目整合及出现的问题 单纯地将Flowable和springBoot整合,使用mysql作为数据库,整合中踩了两个坑,见文末. 在pom中添加依赖 <?xm ...
- kernel base
基础知识 学习网址:ctfwiki 安全客 Kernel:又称核心 维基百科:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理 ...
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- OO Unit4总结 & 结课总结
OO Unit4总结 & 结课总结 OO课Unit4 UML解析应用技术回顾 BUAA.1823.邓新宇 2020/6/19 总结本单元三次作业的架构设计 本单元的架构设计主要是两方面. 一方 ...