刷leetcode-day22
一、题目:
788.旋转数字:
我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。
如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。
现在我们有一个正整数 N
, 计算从 1
到 N
中有多少个数 X 是好数?
示例: 输入: 10 输出: 4
解释: 在[1, 10]中有四个好数: 2, 5, 6, 9。 注意 1 和 10 不是好数, 因为他们在旋转之后不变。
二、思路:
当一个数中含有2,5,6,9任意一个数字并且不含有3,4,7时,则该数为一个好数。
遍历1到N之间的数,首先把它转化为字符串;遍历该字符串,引入一个vector统计它每个数字的个数,再进行判断。
三、代码(C++):
int rotatedDigits(int N) {
vector<int> a(10,0);
int k=0;
for(int i=2;i!=N+1;i++)
{
string s=to_string(i); //把i转化为字符串
for(auto s1:s)
{
++a[s1-'0']; //统计s中每个字符的个数
}
if((a[3]==0)&&(a[4]==0)&&(a[7]==0))
{
if((a[2]!=0)||(a[5]!=0)||(a[6]!=0)||(a[9]!=0)) //好数的条件判断
k++;
}
for(auto &a1:a)
a1=0;
}
return k;
}