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相关推荐

  1. LeetCode 248. 中心对称数 III(DFS/BFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low ...

  2. LeetCode 247. 中心对称数 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 找到所有长度为 n 的中心对称数. 示例 : 输入: n = 2 ...

  3. LeetCode 246. 中心对称数(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串 ...

  4. 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个

    2022-01-15:中心对称数 III. 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low, high] 之间中心对称数的个 ...

  5. LeetCode 1201. 丑数 III(最小公倍数+二分查找)

    1. 题目 请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释: ...

  6. leetcode - 1201. 丑数 III

    请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释:丑数序列为 ...

  7. LeetCode 263. 丑数 264. 丑数 II(DP)

    文章目录 1. LeetCode 263. 丑数 解题 2. LeetCode 264. 丑数 II DP解题 1. LeetCode 263. 丑数 编写一个程序判断给定的数是否为丑数. 丑数就是只 ...

  8. 中心对称数 java_【LeetCode(Java) - 246】中心对称数

    [LeetCode(Java) - 246]中心对称数 [LeetCode(Java) - 246]中心对称数 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路 ??首先 ...

  9. LeetCode 454. 四数相加 II 思考分析

    题目 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单化,所有 ...

  10. lintcode 中等题:Single number III 落单的数III

    题目 落单的数 III 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字. 样例 给出 [1,2,2,3,4,4,5,3],返回 1和5 挑战 O(n)时间复杂度, ...

最新文章

  1. volatile: 多线程程序员最好的朋友
  2. ICS汇编学习笔记——8086中的寄存器
  3. Nginx:proxy_pass、root、rewrite、alias 的使用详解
  4. 常见浏览器兼容性问题与解决方式
  5. mysql load data infile 重写_mysql load data infile 命令的数据导入
  6. Linux系统文件管理以及连接文件和inode简介
  7. 斐讯k2修改dns服务器,斐讯K2固件修改的一些信息
  8. DB9串口和RJ45串口
  9. 安川服务器显示run电机没电,安川变频器上电无显示,无法设定参数是什么原因...
  10. iPhone上传全景照片到谷歌街景地图攻略
  11. 英语影视台词---经典电影台词(世间万物有始皆有终。)
  12. python深度学习include框架_《用Python实现深度学习框架》上市
  13. git 创建关联远程分支报错Did you intend to checkout ‘origin/branchName‘ which can not be resolved as commit?
  14. (Mybatis)Example类用法example.createCriteria
  15. 2021年全球和中国美妆个护现状分析,高端化趋势明显,国产品牌亟待发展「图」
  16. adb通过wifi连接真机
  17. 2018年GitHub最流行Python开源项目
  18. 我们利用计算机解决问题时第一步应该,算法与程序设计综合评价练习题
  19. 使用git拉取github上的项目
  20. 解锁 2022 Google 游戏开发者峰会 | 打造高质量的游戏体验

热门文章

  1. 西门子840d高级编程手册_840D NC 高级编程简单介绍
  2. 考出面试者基本功的 10 个简单编程题
  3. apex显示服务器连接超时,apex与服务器链接超时
  4. 文件或目录损坏且无法读取怎么办,文件或目录损坏且无法读取寻回方法
  5. JAVA随机生成中文姓名,性别,Email,手机号,住址
  6. pcb外观维修_5种最常见的PCB维修
  7. 三阶魔方中心互换_三阶魔方入门
  8. 【windows服务器使用cwRsync实时同步】
  9. python在线音乐播放器_python实现音乐播放器
  10. PowerDesigner建立数据库模型