Blogger Information
Blog 82
fans 0
comment 1
visits 107890
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
给定一个数字求1的个数
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
Original
1183 people have browsed it

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

先贴我昨天不成功的代码:

function count(n){
        let temp = n.toString(),
            l = temp.length;
        if( l == 1 && n >= 1){
            return 1;
        }else if( l == 1 && n == 0 ){
            return 0
        }
        
        if( temp[0] == 1 ){
            let max= 2*Math.pow(10,l-1) - 1,
                min = Math.pow(10,l-1);
                max = max >= n ? n : max;
            return (max - min + 1 + count(max-min) ) + count( --min );
        }else{
            let min = 2*Math.pow(10,l-1)-1;
            
            
            return count( min) + (((+temp[0]) - 2  ))*count( Math.pow(10,l-1) ) + count( +temp.slice(1) );
        }

思路: 

要求一个数字中1的个数,可以分解为求与其位数相同的 1xxx-1999中1的个数 加上 1xxx-1中1的个数,再加上其最高位-2 乘以 与其位数相同的1xxx中1的个数,再加上它末尾数字中1的个数,

采用递归找1的个数,递归出口是 n只有1个数字时返回1的个数。

我这思路一出来,连我自己都觉得我机智,

可惜昨天调试了 一天 发现结果是错的,心很痛,

我今天突然好像发现了问题,一会儿再调调看看

然后是百度之后的结果,稍后说。

刚刚我又刷了一道,是判定一个数字是不是有效数字的,我是用正则解决的,下午再说那道题的解法吧。有效数字这个问题很***,因为题目的意思就是坑你的:

var isNumber = function(s) {
    let patternNagative = /(^\s*\-?\d+\s*$)|(^\s*\-?\d+\.\s*$)|(^\s*\-?\.\d+\s*$)|(^\s*\-?\d+\.\d+\s*$)|(^\s*\-?\d+e\-?\d+\s*$)/,
        patternPositive = /(^\s*\+?\d+\s*$)|(^\s*\+?\d+\.\s*$)|(^\s*\+?\.\d+\s*$)|(^\s*\+?\d+\.\d+\s*$)|(^\s*\+?\d+e\+?\d+\s*$)/,
        patternEAfterDot = /(^\s*(\-|\+)?((\d+)|(\d+e\-?\d+))\.\d*e(\+|\-)?\d+\s*$)|(^\s*(\+|\-)?\.\d+e(\+|\-)?\d+\s*$)/;
    
    return patternNagative.test(s) || patternPositive.test(s) || patternEAfterDot.test(s);
    
};


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post