感觉可以找规律吧,比如说000到999的话0到9的概率一样都是1/10,那么1出现的次数就是3*1000*1/10=300,可以先算一下N的位数,如果N是3位数,那么就在300的基础上操作,除了M开头的那100个数,剩下的是等概率的,可以先减去这部分,然后看一下N的首位占了几份,算出这部分后再判断和M的大小,决定加不加那100个,代码: static int NContainsM(int N,int M){         int length = LengthOfDigits(N);         int FirstNum = N/(int)(Math.pow(10,length-1));         int res = length*((int)Math.pow(10,length))/10;         res-=Math.pow(10,length-1);         if(FirstNum<M){             res=res*(FirstNum+1)/9;         }else if(FirstNum==M){             res=res*(FirstNum+1)/9;             res+=(N-M*Math.pow(10,length-1));         }else{             res=res*(FirstNum)/9;             res+=Math.pow(10,length-1);         }         return res;     }     static int LengthOfDigits(int N){         int res = 0;         while(N>0){             N/=10;             res++;         }         return res;     }