暴力预处理所有数,,然后二分查找,,查找时包含负数,,,,
#include<iostream>
#include<string.h>
using namespace std;
int a[10000000];
int b[10];
int main()
{ int i,j;
int tot=1;
for(i=1;i<=10000000;++i)
{ memset(b,0,sizeof(b));
j=i;
while(j)
{ if(b[j%10]!=1) b[j%10]=1;
else break;
j/=10;
}
if(j==0) a[tot++]=i;
}
int n;
while(cin>>n)
{ if(n<=1) {cout<<"0"<<endl;continue;}
int st=1,ed=tot-1;//这一点需要注意在所有符合的数中进行查找,,
int res;
while(st<=ed)
{ int mid=(st+ed)/2;
if(a[mid]<n)
{res=mid;
st=mid+1;
}
else ed=mid-1;
}
cout<<res<<endl;
}return 0;
}