阶乘后的零(数学)
给定一个整数 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;
}
}
模拟计算器(算法初阶、基础知识)
模拟简单的计算器。 要求:
- 定义名为Number的类,在其中定义两个私有的整型数据成员n1和n2;
- 在Number类中编写构造方法,赋予n1和n2初始值;
- 再为Number类定义加(addition)、减(subtration)、乘(multiplication)、除(division)四个公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。注意:除法运算时要抛出除数为0的异常。
- 在主方法中创建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