プログラマーインタビューゴールドコードインタビュー質問17.06。2発生(繰り返しルールを見つける)

1.タイトル

0からn(nを含む)までの数2の出現回数をカウントするメソッドを記述します。

示例:
输入: 25
输出: 9
解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)

提示:
n <= 10^9

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/number-of-2s-in-range-lcci
著作権はDeduction Networkに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

2.問題解決

同じ質問:Sword Finger Offer-Interview Question 43. 1から1までの整数(nの法則+数式)の発生回数は
、521などのビットごとにビットごとに移動します。
ここに画像の説明を挿入

class Solution {
public:
    int numberOf2sInRange(int n) {
        long i = 1, count = 0, high, cur, low;
    	while(n/i)//遍历每个位
    	{
    		high = n/(10*i);//高位
    		cur = (n/i)%10;//当前位
    		low = n-(n/i)*i;//低位
    		if(cur < 2)
    			count += high*i;
    		else if(cur == 2)
    			count += high*i+low+1;
    		else
    			count += (high+1)*i;
    		i *= 10;
    	}
    	return count;
    }
};

0 ms 5.9 MB

856の元の記事を公開 2382のような 440,000以上を 訪問

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/105558095