Problem
A confusing number is a number that when rotated 180
degrees becomes a different number with each digit valid.
We can rotate digits of a number by 180
degrees to form new digits.
- When
0
,1
,6
,8
, and9
are rotated180
degrees, they become0
,1
,9
,8
, and6
respectively. - When
2
,3
,4
,5
, and7
are rotated180
degrees, they become invalid.
Note that after rotating a number, we can ignore leading zeros.
- For example, after rotating
8000
, we have0008
which is considered as just8
.
Given an integer n
, return the number of confusing numbers in the inclusive range [1, n]
.
Example 1:
1 | Input: n = 20 |
Example 2:
1 | Input: n = 100 |
Constraints:
1 <= n <= 109
Analysis
题目给出了confusing number的定义,是把数字整体翻转180度后,合法且与原来的数字不相等的数。这道题目要做的是返回n
以内confusing number的数量。因为confusing number只能由5个可以反转180度后还是合法的数字组成,所以这里我们可以用递归的方法进行穷举,在穷举的过程中需要验证两个东西:
- 数字是否是confusing number,虽然组成数字的每一个数字都是可以翻转,但是可能整体翻转180度后与原有数字相同,这种情况要排除在外;
- 数字是否小于等于
n
,这个是题目的限制。
然后用一个全局的变量去统计符合要求的confusing number数量即可。
Solution
无。
Code
1 | class Solution { |
Summary
这道题目是一个系列题,第一题就是判断是否confusing number,恰好这这道题目的一个子方法。对于返回n
以内符合某种特殊要求的数字个数,一般采用构造法,即通过构造得到符合要求的数字,再限定范围。这道题目的分享到这里,感谢你的支持!