✨ 今日题目总结
今天做的题目大多量采用 暴力枚举 解决,但是暴力解法有 时间复杂度过高、可能溢出 等问题,需要优化:
题目 | 你的解法 | 存在的问题 | 可能的优化方案 |
---|
好数计数 | 举一个 1~N 判断 | O(N logN) 复杂度过高 | 预计算、数位 DP |
浮点数转 R 格式 | Math.round(d * 2^n) | Math 方法用错、可能精度丢失 | 使用 BigDecimal |
宝石组合最优 S 值 | 三重循环 O(N³) | 超时 + 溢出 | 先排序+剪枝减少循环、预计算 LCM |
💡 Java 常用方法 & 工具库
Java 里已经有很多内置方法,避免重复造轮子!
📈 1. 数学计算
功能 | 方法 |
---|
四舍五入 | Math.round(x) |
向上取整 | Math.ceil(x) |
向下取整 | Math.floor(x) |
绝对值 | Math.abs(x) |
应用正数 a^b | Math.pow(a, b) |
最大公系数 (GCD) | BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)) |
最小公倍数 (LCM) | a / gcd(a, b) * b |
取最大最小值 | Math.max(a, b) ,Math.min(a, b) |
📝 2. 数字转换
功能 | 方法 |
---|
字符串转整数 | Integer.parseInt(s) |
字符串转长整型 | Long.parseLong(s) |
字符串转浮点数 | Double.parseDouble(s) |
整数转字符串 | String.valueOf(x) |
浮点数保留 n 位 | String.format("%.nf", x) |
大数处理 | BigInteger / BigDecimal |
🌐 3. 字符串处理
功能 | 方法 |
---|
求字符串长度 | s.length() |
字符串拼接 | s1 + s2 ,StringBuilder.append() |
截取字符串 | s.substring(start, end) |
查找字符位置 | s.indexOf('x') |
替换字符/子串 | s.replace('a', 'b') ,s.replaceAll("ab", "cd") |
分割字符串 | s.split(" ") |
去除首尾空格 | s.trim() |
字符串转小写/大写 | s.toLowerCase() ,s.toUpperCase() |
判断是否包含子串 | s.contains("abc") |
字符串倒序 | new StringBuilder(s).reverse().toString() |
🔍 总结
- 多用 Java 内置方法 (数学/字符串/集合),减少 手写暴力代码。
- 优化暴力枚举方法 (如排序+剪枝、预计算
LCM)