leetcode#248 中心对称数 III
leetcode#248 中心对称数 III
题目:
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
写一个函数来计算范围在 [low, high] 之间中心对称数的个数。
示例:
输入: low = "50", high = "100"
输出: 3
解释: 69,88 和 96 是三个在该范围内的中心对称数
思路:
数位dp。
计算位数小于字符串位数的个数,计算长度相等时的个数最后相加。
代码:
class Solution
{public:bool check(string &s){if (s.length() == 1)return true;string tmp = s.substr(0, s.length() / 2);reverse(tmp.begin(), tmp.end());for (auto &i : tmp)if (i == '6')i = '9';else if(i=='9')i = '6';return tmp <= s.substr((s.length() + 1) / 2);}int count(string str){int res = 0;int len = str.length();//计算位数少于字符串位数的个数 因为位数少,所以每一位没有限制for (int i = 1; i < len; ++i){int num = i / 2;if (i & 1){if (num <= 1)res += pow(4, num) * 3;elseres += 4 * pow(5, num - 1) * 3;}elseres += 4 * pow(5, num - 1);}//计算位数和字符串位数相等的个数、//dp[i][j] 小于第j位的个数和等于第j位的个数。const int equal = 0, less = 1;vector<char> choice1 = {'0', '1', '6', '8', '9'};vector<vector<int>> dp(2, vector<int>(len / 2 + 1, 0));dp[equal][0] = 1;for (int i = 1; i <= len / 2; ++i){char ch = str[i - 1];dp[less][i] += (i == 1 ? 4 : 5) * dp[less][i - 1];int j;for (j = (i == 1 ? 1 : 0); j < 5 && choice1[j] < ch; ++j)dp[less][i] += dp[equal][i - 1];if (choice1[j] == ch)dp[equal][i] += dp[equal][i - 1];}//加上上面计算出的结果 分奇偶,如1234112中 1234321不符合if (len & 1){int i;char ch = str[len / 2];vector<char> choice2{'0', '1', '8'};res += 3 * dp[less][len / 2];for (i = 0; i < 3 && choice2[i] < ch; ++i)res += dp[equal][len / 2];if (i != 3 && choice2[i] == ch && check(str))res += dp[equal][len / 2];}else{res += dp[less][len / 2];if (check(str))res += dp[equal][len / 2];}return res;}int strobogrammaticInRange(string low, string high){//范围不正确if (stol(low) > stol(high))return 0;//返回count(hight)-count(low-1);if (!stol(low))return count(high);low = to_string(stol(low) - 1);return count(high) - count(low);}
};
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)时间复杂度, ...
最新文章
- volatile: 多线程程序员最好的朋友
- ICS汇编学习笔记——8086中的寄存器
- Nginx:proxy_pass、root、rewrite、alias 的使用详解
- 常见浏览器兼容性问题与解决方式
- mysql load data infile 重写_mysql load data infile 命令的数据导入
- Linux系统文件管理以及连接文件和inode简介
- 斐讯k2修改dns服务器,斐讯K2固件修改的一些信息
- DB9串口和RJ45串口
- 安川服务器显示run电机没电,安川变频器上电无显示,无法设定参数是什么原因...
- iPhone上传全景照片到谷歌街景地图攻略
- 英语影视台词---经典电影台词(世间万物有始皆有终。)
- python深度学习include框架_《用Python实现深度学习框架》上市
- git 创建关联远程分支报错Did you intend to checkout ‘origin/branchName‘ which can not be resolved as commit?
- (Mybatis)Example类用法example.createCriteria
- 2021年全球和中国美妆个护现状分析,高端化趋势明显,国产品牌亟待发展「图」
- adb通过wifi连接真机
- 2018年GitHub最流行Python开源项目
- 我们利用计算机解决问题时第一步应该,算法与程序设计综合评价练习题
- 使用git拉取github上的项目
- 解锁 2022 Google 游戏开发者峰会 | 打造高质量的游戏体验