【注释详细,思路清晰】【打卡第5天】leetcode热题HOT100之Java实现:1006. 笨阶乘

本文主要是介绍【注释详细,思路清晰】【打卡第5天】leetcode热题HOT100之Java实现:1006. 笨阶乘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

2、思路分析

最好的方式,举个例子:8 7 6 5 4 3 2 1,自己动笔跟着代码跑一跑

① 先计算乘除,再计算加减

②也就是 A*B/C,乘除号两边的数都要计算

③找规律:其实是4个数一组,比如N=8,那么笨阶乘为:8*7/6+5    -4*3/2+1

设置index = 0为元素序列的标记符,N先入栈,入栈即减减

当index % 4 == 0,说明是第0个元素,那么添加第一个符号,N*(N-1),index++,此时index = 1

当index % 4 == 1,说明是第1个元素,那么添加第二个符号,N*(N-1)/(N-2) , index ++ ,此时index = 2

当index % 4 == 2,说明是第2个元素,那么将这个元素入栈,N-3入栈,index++ ,此时Index  = 3

要不然就是 减号了,减号是前面下一组第一个元素的正负号。继续往下循环

。。。。。。

。。。。

3、代码实现

class Solution {/*笨阶乘:1、整数递减序列2、用固定顺序 * / + - :来替换所有乘法  *  操作符3、新的序列计算规则:在执行任何加、减操作之前执行所有的乘法和除法4、除法使用的是取整运算*//*使用栈4个一组,乘除先算,加 减 入栈最后计算栈中元素的和*/public int clumsy(int N) {// 创建栈存储计算后的元素Stack<Integer> stack = new Stack<Integer>();// 首先入栈 Nstack.push(N);//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);}N--;index++;}// 求栈stack中的值int sum = 0;while(!stack.isEmpty()){sum +=stack.pop();}return sum;}
}

 

 

 

 

 

 

 

这篇关于【注释详细,思路清晰】【打卡第5天】leetcode热题HOT100之Java实现:1006. 笨阶乘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728122

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.