暴力搜索:
#include<bits/stdc++.h>
using namespace std;
void printVec1(vector<int>& v);
void printVec2(vector<vector<int>>& v);
class Solution {
bool doit(long long num,int T,long long n){
if(num > n) return false;
int t = 0;
long long s = num;
while(s>0){
t++;
s/=10;
}
if(t!=T) return false;
s = num;
long long r = 0;
while(s>0){
r*=10;
int d = s%10;
if(d==6) r+=9;
else if(d==9) r+=6;
else r+=d;
s/=10;
}
if(num==r) return false;
return true;
};
void dfs(int t,int T,long long num,int& ans,long long n){
if(t > 0){
if(doit(num,t,n)) ans++;
}
if(t == T) return ;
int bits[] = {0,1,6,8,9};
for(int i=0;i<5;i++){
num*=10;
num+=bits[i];
dfs(t+1,T,num,ans,n);
num/=10;
}
};
public:
int confusingNumberII(int N) {
int ans = 0;
long long num = 0;
int n = N;
int t = 0;
while(n>0){
n/=10;
t++;
}
dfs(0,t,num,ans,N);
return ans;
}
};
int main(){
Solution myS;
int ans = myS.confusingNumberII(195);
cout<<ans<<endl;
return 0;
}
// 输出一维数组
void printVec1(vector<int>& v){
printf("{");
if(v.size()!=0) printf("%d",v[0]);
for(int i=1;i<v.size();i++){
printf(",%d",v[i]);
}
printf("}");
}
// 输出二维数组
void printVec2(vector<vector<int>>& v){
printf("{");
if(v.size()!=0) printVec1(v[0]);
for(int i=1;i<v.size();i++){
printf(",");
printVec1(v[i]);
}
printf("}");
}