题目描述:
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
写一个函数来计算范围在 [low, high] 之间中心对称数的个数。
示例:
输入: low = “50”, high = “100”
输出: 3
解释: 69,88 和 96 是三个在该范围内的中心对称数
注意:
由于范围可能很大,所以 low 和 high 都用字符串表示。
方法1:
主要思路:
(1)仔细观察中心对称数的规律,若中心对称数的位数是偶数,则可以由{0,0}{1,1}{6,9}{9,6}{8,8}从数字的两端对称组成,若中心对称数的位数是奇数,则中心数字只能是0,1,8三种数字;
(2)根据上述的分析,可以从空字符串,或“1”,“0”,“8”开始,在字符串的两端对应的添加数字对,来实现中心对称数的构成;
(3)在构造中心对称数的过程中,和low,high比较,保证生成的中心对称数是有效的;
class Solution {
public:
//使用深度优先构造中心对称数
void dfs(string& low,string& high,int& count,string cur){
if(cur.size()>=low.size()&a