1012. 至少有 1 位重复的数字

给定正整数 N,返回小于等于 N 且具有至少 1 位重复数字的正整数。

示例 1:

输入:20
输出:1
解释:具有至少 1 位重复数字的正数(<= 20)只有 11 。
示例 2:

输入:100
输出:10
解释:具有至少 1 位重复数字的正数(<= 100)有 11,22,33,44,55,66,77,88,99 和 100 。

我的代码 4ms

class Solution {
public:
    int numDupDigitsAtMostN(int N) {
        string s=to_string(N);
        int a[10]={0};
        int b[10]={0};
        int sum=0;
        char index;
        for(int i=s.size()-1;i>=1;i--)
        {
            int t=9;
            for(int j=1;j<i;j++)
                t*=(10-j);
            sum+=t;  
        }
      for(int i=0;i<s.size();i++)
       {
           if(i==0)
              index='1';
           else
               index='0';
           if(s[i]>index)
               {
                   int t=s[i]-index;
                   t-=a[s[i]-'1'];
                   if(t>=1)
                   {
                       for(int j=1;j<s.size()-i;j++)
                          t*=(10-j-i);
                       sum+=t; 
                   }
               }
           for(int k=s[i]-'0';k<10;k++)
                a[k]++;
           b[s[i]-'0']++;
           if(b[s[i]-'0']>=2) break;
           if(i==(s.size()-1)) sum++;
       }
        return N-sum;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42054167/article/details/93055875