leetcode 233. Number of Digit One

偏执的太偏执、 2022-08-20 14:16 160阅读 0赞

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

  1. class Solution {
  2. public:
  3. int countDigitOne(int n) {
  4. if(n/10==0)
  5. return n>=1?1:0;
  6. int num=n;
  7. int len=0;
  8. while(num!=0)
  9. {
  10. num=num/10;
  11. len++;
  12. }
  13. //char str[100];
  14. //_itoa(n,str,10);
  15. int k=n/pow(10,len-1);
  16. //cout<<strlen(str)<<endl;
  17. if(k==1)
  18. return pow(10,len-2)*(len-1)+countDigitOne(n-pow(10,len-1))+n-pow(10,len-1)+1;
  19. else
  20. return k*(len-1)*pow(10,len-2)+pow(10,len-1)+countDigitOne(n-k*pow(10,len-1));
  21. }
  22. };

这个主要用到数学排列组合,求和,数学的内容多一些

accepted

发表评论

表情:
评论列表 (有 0 条评论,160人围观)

还没有评论,来说两句吧...

相关阅读