网站调用时间,高端开发网站哪家专业,做网站赚50万,下载 公司网站 程序 需要ftp权限解题思路1#xff1a; 设定整数点#xff08;如1、10、100等等#xff09;作为位置点i#xff08;对应n的各位、十位、百位等等#xff09;#xff0c;分别对每个数位上有多少包含1的点进行分析。
第一步#xff1a;对n进行分割#xff0c;分为两部分#xff1a;高位… 解题思路1 设定整数点如1、10、100等等作为位置点i对应n的各位、十位、百位等等分别对每个数位上有多少包含1的点进行分析。
第一步对n进行分割分为两部分高位n/i(即a)低位n%i(即b)
第二步分三种情况进行讨论
1当i表示百位且百位对应的数2时如n31456,i100则a314,b56其中百位对应的数字是442。此时百位为1的次数有a/10132最高两位0~31每一次都包含100个连续的点即共有(a/101)*100个点的百位为1的数字。 2当i表示百位且百位对应的数为1时如n31156,i100则a311,b56其中百位对应的数字是1。此时百位对应的就是1则共有a/10(最高两位0-30)次是包含100个连续点。当最高两位为31即a311本次只对应局部点00~56共b1次。即共有a/10*100(b1)个。 3当i表示百位且百位对应的数为0,如n31056,i100则a310,b56其中百位对应的数字是0。此时百位为1的次数有a/1031最高两位0~30。 综合以上三种情况当百位对应0或2时有(a8)/10次包含所有100个点还有当百位为1(即a%101)需要增加局部点b1。之所以补8是因为当百位为0则a/10(a8)/10当百位2补8会产生进位位效果等同于(a/101)。
import java.util.*;
public class Solution {public int NumberOf1Between1AndN_Solution(int n) {int count 0;for(int i 1; i n; i*10){int a n/i,b n%i;count (a 8)/10*i ((a%10 1) ? 1: 0)*(b 1);}return count;}
}