X是一个好数当且仅当单独旋转每一个数位180度之后,能够得到一个合法的不同于X的数。每一个数位必须被旋转 - 我们不能选择不管它。
如果每一个数位在旋转之后仍然是一个数位,那么这个数字是合法的。0,1和8旋转保持不变; 2和5旋转后互相变换; 6和9旋转后互相变换,其余数字旋转后不会变成任何数字所以是不合法的。
现在给定一个正数 N,多少1 到 N 之间的数X是好的?
样例
样例1:
输入: 10
输出: 4
解释:
在[1, 10]之内存在4个好数:2, 5, 6, 9.
注意1和10不是好数,因为它们在旋转之后没有变化。
样例2:
输入: 5
输出: 2
解释:
在[1, 5]之内存在2个好数:2, 5
注意事项
- N 会在范围
[1, 10000]内。
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution {
public:
/**
* @param N: a positive number
* @return: how many numbers X from 1 to N are good
*/
int rotatedDigits(int N)
{
int ret = 0;
// write your code here
for(int i = 1; i <= N; i++)
{
int tmp = fanzhuan(i);
if(tmp != i && tmp != -1)
{
ret++;
}
}
return ret;
}
int fanzhuan(int num)
{
string ret;
while(num)
{
int gewei = num % 10;
switch(gewei)
{
case 0:
{
ret = '0' + ret;
break;
}
case 1:
{
ret = '1' + ret;
break;
}
case 2:
{
ret = '5' + ret;
break;
}
case 3:
{
return -1;
}
case 4:
{
return -1;
}
case 5:
{
ret = '2' + ret;
break;
}
case 6:
{
ret = '9' + ret;
break;
}
case 7:
{
return -1;
}
case 8:
{
ret = '8' + ret;
break;
}
case 9:
{
ret = '6' + ret;
break;
}
}
num = num / 10;
}
return stoi(ret);
}
};
本文探讨了一种好数的概念,即一个数旋转180度后成为不同于原数的合法数,并介绍了如何计算1到N之间的好数数量。通过具体的样例解析,展示了算法实现的细节。
1613

被折叠的 条评论
为什么被折叠?



