首页 > 编程语言 >算法刷题-阶乘后的零(数学)、模拟计算器(算法初阶、基础知识)、解码方法(字符串、动态规划)

算法刷题-阶乘后的零(数学)、模拟计算器(算法初阶、基础知识)、解码方法(字符串、动态规划)

时间:2023-04-14 10:06:38浏览次数:41  
标签:初阶 映射 int Number 算法 阶乘 n1 n2 public

阶乘后的零(数学)

给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

示例 1: 输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0 示例 2: 输入:n = 5 输出:1 解释:5! = 120 ,有一个尾随 0 示例 3: 输入:n = 0 输出:0

提示:

  • 0 <= n <= 104

**进阶:**你可以设计并实现对数时间复杂度的算法来解决此问题吗?

解答:

class Solution {
    public int trailingZeroes(int n) {
        int count = 0;
        while (n >= 5) {
            count += n / 5;
            n /= 5;
        }
        return count;
    }
}

模拟计算器(算法初阶、基础知识)

模拟简单的计算器。 要求:

  1. 定义名为Number的类,在其中定义两个私有的整型数据成员n1和n2;
  2. 在Number类中编写构造方法,赋予n1和n2初始值;
  3. 再为Number类定义加(addition)、减(subtration)、乘(multiplication)、除(division)四个公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。注意:除法运算时要抛出除数为0的异常。
  4. 在主方法中创建Number类的对象,调用上述各个方法,测试并输出计算结果,注意进行必要的异常捕获与处理。

解答:

public class Number {
    private int n1;
    private int n2;
    public Number(int n1, int n2) {
        this.n1 = n1;
        this.n2 = n2;
    }
    public int addition() {
        return n1 + n2;
    }
    public int subtration() {
        return n1 - n2;
    }
    public int multiplication() {
        return n1 * n2;
    }
    private int division() {
        if (n2 == 0) {
            throw new IllegalArgumentException("除数参数不合法");
        }
        return n1 / n2;
    }
    public static void main(String[] args) {
        Number number = new Number(6, 0);
        System.out.println(number.addition());
        System.out.println(number.subtration());
        System.out.println(number.multiplication());
        try {
            System.out.println(number.division());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

解码方法(字符串、动态规划)

一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1'B' -> 2...'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:

  • "AAJF" ,将消息分组为 (1 1 10 6)
  • "KJF" ,将消息分组为 (11 10 6)

注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。 给你一个只含数字的 **非空 **字符串 s ,请计算并返回 解码 方法的 总数 。 题目数据保证答案肯定是一个 32 位 的整数。

示例 1:

输入:s = "12"
输出:2
解释:它可以解码为 "AB"(1 2)或者 "L"(12)。

示例 2:

输入:s = "226"
输出:3
解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

示例 3:

输入:s = "0"
输出:0
解释:没有字符映射到以 0 开头的数字。含有 0 的有效映射是 'J' -> "10" 和 'T'-> "20" 。由于没有字符,因此没有有效的方法对此进行解码,因为所有数字都需要映射。

示例 4:

输入:s = "06"
输出:0
解释:"06" 不能映射到 "F" ,因为字符串含有前导 0("6" 和 "06" 在映射中并不等价)。

提示:

  • 1 <= s.length <= 100
  • s 只包含数字,并且可能包含前导零。

解答:

class Solution {
    public int numDecodings(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int n = s.length();
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = (s.charAt(0) == '0' ? 0 : 1);
        for (int i = 1; i < n; i++) {
            char c = s.charAt(i);
            char pre = s.charAt(i - 1);
            dp[i + 1] = c == '0' ? 0 : dp[i];
            if (pre == '1' || (pre == '2' && c <= '6')) {
                dp[i + 1] += dp[i - 1];
            }
        }
        return dp[n];
    }
}

本文内容到此结束了, 如有收获欢迎点赞

标签:初阶,映射,int,Number,算法,阶乘,n1,n2,public
From: https://blog.51cto.com/zhanjq/6189394

相关文章

  • 【DS】算法的时间复杂度与空间复杂度
    文章目录算法的时间复杂度与空间复杂度1.算法效率2.时间复杂度2.1时间复杂度的概念2.2大O渐进表示法2.3常见时间复杂度计算实例实例1——实例2——实例3——实例4——时间复杂度是做悲观预期实例5——冒泡排序·思想计算实例6——二分查找·思想计算实例7、8-——递......
  • 使用Pytorch实现强化学习——DQN算法
    使用Pytorch实现强化学习——DQN算法强化学习的主要构成强化学习主要由两部分组成:智能体(agent)和环境(env)。在强化学习过程中,智能体与环境一直在交互。智能体在环境里面获取某个状态后,它会利用该状态输出一个动作(action)。然后这个动作会在环境之中被执行,环境会根据智能体采取的动......
  • MATLAB代码:基于改进K-means算法的含电动汽车负荷源荷场景聚类
    MATLAB代码:基于改进K-means算法的含电动汽车负荷源荷场景聚类关键词:有序聚类 改进k-means聚类电动汽车负荷聚类风光场景聚类 仿真平台:MATLAB主要内容:代码主要做的是基于改进k-means算法的场景生成,具体为含有电动汽车负荷的场景聚类问题,其中,光电和电负荷用有序聚类方法,风......
  • MATLAB代码:基于两阶段鲁棒优化算法的微网电源容量优化配置
    MATLAB代码:基于两阶段鲁棒优化算法的微网电源容量优化配置关键词:容量优化配置微网 两阶段鲁棒规划仿真平台:MATLABYALMIP+CPLEX主要内容:代码主要做的是一个微网中电源容量优化配置的问题,即风电、光伏、储能以及燃气轮机的容量规划问题,程序考虑了不确定性,采用两阶段鲁棒优化......
  • MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究
    MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究关键词:分布式电源选址定容多目标遗传算法  参考文档:《店主自写文档》基本复现;仿真平台:MATLAB主要内容:代码主要做的是基于多目标遗传算法的分布式电源选址定容模型,首先构建了含义分布式电源的配电网基本结构,对分布......
  • 配电网动态多目标重构 采用改进粒子群算法,通过matlab编程,以IEEE33节点网络为例
    配电网动态多目标重构采用改进粒子群算法,通过matlab编程,以IEEE33节点网络为例,设置孤岛和环网约束,以开关动作次数、电压偏差和网损为目标,得到动态多目标重构模型,程序采用严格约束方式,未使用罚函数等非准确方式ID:46180674573489420......
  • 灰狼、鲸鱼、人工蜂群算法matlab 程序采用CEC21测试函数对灰狼算法、鲸鱼算法、人工蜂
    灰狼、鲸鱼、人工蜂群算法matlab程序采用CEC21测试函数对灰狼算法、鲸鱼算法、人工蜂群算法的性能进行测试,可以得到相同测试环境(相同种群数量和迭代次数)的算法对比结果,附赠CEC21测试函数包和介绍资料。ID:4290671868436557......
  • 插电式混合动力汽车的能量管理:用于模型预测控制的凸优化算法 研究了求解非线性损耗混
    插电式混合动力汽车的能量管理:用于模型预测控制的凸优化算法23研究了求解非线性损耗混合动力电动汽车能量管理模型预测控制优化问题的凸公式算法的计算性能。提出了一种投影内点法,通过对控制输入施加不等式约束作为投影,降低了牛顿步长矩阵求逆的规模和复杂度,并与交替方向乘子法(......
  • 遗传算法 无功优化matlab 利用遗传算法和改进遗传算法对标准节点系统(14 33节点)进行无
    遗传算法无功优化matlab利用遗传算法和改进遗传算法对标准节点系统(1433节点)进行无功优化,以网损+电压偏差罚函数+无功偏差罚函数作为目标函数,利用发电机端电压变压器变比电容器容量作为优化变量,实现很好的优化效果ID:8790635531309941......
  • 微网群 多微网 优化调度matlab 程序采用matlab编写,可以实现三个微网的优化调度策略,采
    微网群多微网优化调度matlab程序采用matlab编写,可以实现三个微网的优化调度策略,采用改进粒子群智能算法,通过小生灵+混沌算法,实现了算法优化前后的对比分析,同时可以分析不同主体(包括发电机、燃料电池、储能电池)的出力情况以及微网间功率传输等数据图形,创新性好,采用动态电价策略......