Leetcode每日一题 —— 788. 旋转数字
SomeBottle
·
2026-05-02
·
via LINUX DO - 最新话题
力扣 LeetCode 788. 旋转数字 - 力扣(LeetCode) 788. 旋转数字 - 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。 如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方(在这种情况下,它们以不同的方向旋转,换句话说,2 和 5 互为镜像);6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。 现在我们有一个正整数 N, 计算从 1... 思路 注意题目所说的旋转是指 字形在几何上的旋转 ,比如 2 旋转后看上去就像 5 。 题目中已经提到 0, 1, 8 旋转后还是自身,而 2, 5, 6, 9 旋转后数位会变。为了满足好数定义: 这个数必须每个数位都是 0, 1, 2, 5, 6, 8, 9 其中一个数字。 至少要包含 2, 5, 6, 9 中的一个(以保证旋转后不同)。 按照这个规则枚举判断即可。 代码 class Solution { public: int rotatedDigits(int n) { // 注意这里的旋转指的是字形在几何上的旋转,比如 2 旋转后看上去就像 5 // 满足要求的数只有 0, 1, 2, 5, 6, 8, 9 // 其中 0, 1, 8 旋转后还是自身 // 题目要求整个数旋转后是不同的数,因此至少要包含 2, 5, 6, 9 中的一个 // 直接枚举判断即可 int res=0; for(int i=1;i<=n;i++){ bool allSpecial=true; // 所有位都在 0, 1, 2, 5, 6, 8, 9 bool invDiff=false; // 是否有翻转后不同的数 int num=i; while(num>0){ switch(num%10){ case 2: case 5: case 6: case 9: invDiff=true; case 0: case 1: case 8: allSpecial=true; break; default: allSpecial=false; } if(!allSpecial){ break; } num/=10; } if(allSpecial&&invDiff){ res++; } } return res; } }; 1 个帖子 - 1 位参与者 阅读完整话题
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。