【LeetCode - 248】中心对称数 III
文章目录
- 1、题目描述
- 2、解题思路
- 3、解题代码
1、题目描述
2、解题思路
给定一个区间,比如 [50, 100]。
先计算出下限的长度和上限的长度,分别为 2 和 3,于是分别找出长度为 2 位数的中心对称数字和长度为 3 位数的中心对称数字,接着把超出 [50, 100] 区间的数字剔除即可。
具体算法采用递归的思路:
1、遍历上下限的长度;
2、对于长度为 n 的中心对称数,分别在它两侧尝试放 {‘0’, ‘0’}, {‘1’, ‘1’}, {‘8’, ‘8’}, {‘6’, ‘9’}, {‘9’, ‘6’};
3、注意长度为 1 或者在正中间是不可以为 6 或者 9的;
4、统计个数的时候,如果数字长度为 1,则有效;如果长度大于 1 的,则必须第一个字符不能为 ‘0’,否则就不算 n 位数字了。
3、解题代码
class Solution {private final char[][] mapping = {{'0', '0'}, {'1', '1'}, {'8', '8'}, {'6', '9'}, {'9', '6'}};public int count = 0;/*** 计算范围在 [low, high] 之间中心对称数的个数。** @param low* @param high* @return*/public int strobogrammaticInRange(String low, String high) {int lo = low.length();int hi = high.length();// 获取长度 [lo, hi] 区间的中心对称数for (int n = lo; n <= hi; n++) {char[] chs = new char[n];getStrobogrammatic(chs, 0, chs.length - 1, low, high);}return count;}/*** 填充可能的中心对称数到 chs* @param chs* @param lo 左指针* @param hi 右指针* @param low 下限* @param high 上限*/public void getStrobogrammatic(char[] chs, int lo, int hi, String low, String high) {if (lo > hi) { // 填充完毕,开始统计个数if (chs.length == 1 || chs[0] != '0') { // 如果 chs 长度为 1,则有效,否则第 0 个元素不能为 '0'String str = String.valueOf(chs);if (compare(str, low) && compare(high, str)) {count++;}}return;}// 遍历 lo 和 hi 的可能取值for (char[] map : mapping) {if (lo == hi && map[0] != map[1]) continue; // 正中间不可以是 6 或者 9chs[lo] = map[0]; // 0 1 8chs[hi] = map[1]; // 0 1 8getStrobogrammatic(chs, lo + 1, hi - 1, low, high);}}/*** 判断 s1 是否大于 s2* @param s1* @param s2* @return*/public boolean compare(String s1, String s2) {if (s1.length() == s2.length()) {if (s1.compareTo(s2) >= 0) {return true;} else {return false;}}return true;}
}
【LeetCode - 248】中心对称数 III相关推荐
- LeetCode 248. 中心对称数 III(DFS/BFS)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low ...
- LeetCode 247. 中心对称数 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 找到所有长度为 n 的中心对称数. 示例 : 输入: n = 2 ...
- LeetCode 246. 中心对称数(哈希)
文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串 ...
- 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个
2022-01-15:中心对称数 III. 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low, high] 之间中心对称数的个 ...
- LeetCode 1201. 丑数 III(最小公倍数+二分查找)
1. 题目 请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释: ...
- leetcode - 1201. 丑数 III
请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释:丑数序列为 ...
- LeetCode 263. 丑数 264. 丑数 II(DP)
文章目录 1. LeetCode 263. 丑数 解题 2. LeetCode 264. 丑数 II DP解题 1. LeetCode 263. 丑数 编写一个程序判断给定的数是否为丑数. 丑数就是只 ...
- 中心对称数 java_【LeetCode(Java) - 246】中心对称数
[LeetCode(Java) - 246]中心对称数 [LeetCode(Java) - 246]中心对称数 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路 ??首先 ...
- LeetCode 454. 四数相加 II 思考分析
题目 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单化,所有 ...
- lintcode 中等题:Single number III 落单的数III
题目 落单的数 III 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字. 样例 给出 [1,2,2,3,4,4,5,3],返回 1和5 挑战 O(n)时间复杂度, ...
最新文章
- SSG140 web、telnet、ssh无法访问,仅支持console
- Numpy求均值、中位数、众数的方法
- 230:Borrowers
- python三十九:logging模块
- application.yml如何显示成小叶子图标
- 极简教程: 使用 matplotlib 绘制 GIF 动图
- java 饥饿现象,Java单例模式、饥饿模式代码实例
- php流程控制作业题,php流程控制
- java插入排序实现,经典(Java版)排序算法的分析及实现之一直接插入排序
- 搜狗AI,正在抢滩智能手机
- ajax、axios、fetch之间的详细区别以及优缺点
- 召回2014年8英语个月的道路
- java图书管理系统(MySQL)
- 数据库常见面试题汇总
- java坦克大战思路总结
- coreldraw x4如何出血_CorelDRAW软件出血位详解
- 方差,标准差,协方差,样本标准差,总体标准差,抽样平均误差
- 张学孟 (帮别人名字作诗)
- Error: datadir must be specified
- Linux内核“问题门” - 学习问题、经验集锦