leetCode,LeetCode Number of Digit One

 2023-11-07 阅读 29 评论 0

摘要:原題鏈接在這里:https://leetcode.com/problems/number-of-digit-one/ 每10個數, 有一個個位是1, 每100個數, 有10個十位是1, 每1000個數, 有100個百位是1.? 做一個循環, 每次計算單個位上1得總個數(個位,十位, 百位).?? 例子: 以算百位上1為例子: ? 假設百位上是0, 1,

原題鏈接在這里:https://leetcode.com/problems/number-of-digit-one/

每10個數, 有一個個位是1, 每100個數, 有10個十位是1, 每1000個數, 有100個百位是1.? 做一個循環, 每次計算單個位上1得總個數(個位,十位, 百位).??

例子:

以算百位上1為例子: ? 假設百位上是0, 1, 和 >=2 三種情況:?

leetCode。??? case 1: n=3141092, a= 31410, b=92. 計算百位上1的個數應該為 3141 *100 次.

??? case 2: n=3141192, a= 31411, b=92. 計算百位上1的個數應該為 3141 *100 + (92+1) 次.?

??? case 3: n=3141592, a= 31415, b=92. 計算百位上1的個數應該為 (3141+1) *100 次.?

以上三種情況可以用 一個公式概括:(a + 8) / 10 * m + (a % 10 == 1) * (b + 1);

期中 (a+8)/10 是用來判斷該位是否大于等于2.

leetcode121、AC Java:

 1 public class Solution {
 2     public int countDigitOne(int n) {
 3         //(a+8)/10*m + (a%10 == 1)*(b+1)
 4         int res = 0;
 5         for(long m = 1; m<=n; m*=10){
 6             long a = n/m;
 7             long b = n%m;
 8             res+=(a+8)/10 * m;
 9             if(a%10 == 1){
10                 res+=(b+1);
11             }
12         }
13         return res;
14     }
15 }

?

轉載于:https://www.cnblogs.com/Dylan-Java-NYC/p/4920176.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/167763.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息