剑指offer(四十)之整数中1出现的次数(从1到n整数中1出现的次数)

题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

代码1:

<span style="color:#6600cc;">public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int nums=0;
        if(n<=0)
            return nums;
        for(int i=1;i<=n;i++)
        {
            String s=String.valueOf(i);
            char temp[]=new char[s.length()];
            for(int j=0;j<s.length();j++)
            {
                temp=s.toCharArray();
            }
            for(int j=0;j<s.length();j++)
            {
                if(temp[j]=='1')
                {
                    nums++;
                }
            }
        }
        return nums;
    }
}</span>

代码2:

<span style="color:#993399;">public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        int nums=0;
        if(n<=0)
            return nums;
        StringBuffer buffer=new StringBuffer();
        for(int i=1;i<=n;i++)
        {
            String s=String.valueOf(i);
            buffer.append(s);
        }
       //String b=buffer.toString();
        for(int i=0;i<buffer.length();i++)
        {
            if(buffer.charAt(i)=='1'){
                nums++;
            }
        }
        return nums;
    }
}</span>

时间: 2024-12-26 00:10:19

剑指offer(四十)之整数中1出现的次数(从1到n整数中1出现的次数)的相关文章

剑指offer(四十九)之二叉树中和为某一值的路径

题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 代码: <span style="color:#000099;">import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(

剑指offer(四十六)之树的子结构

题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 思路: 1.首先设置标志位result = false,因为一旦匹配成功result就设为true,剩下的代码不会执行,如果匹配不成功,默认返回false 2.递归思想,如果根节点相同则递归调用isSubTree(),如果根节点不相同,则判断tree1的左子树和tree2是否相同,再判断右子树和tree2是否相同 3.注意null的条件,HasSubTree中,如果两棵树都不为空才进行判断,isSubTree中,如果Tree2为空,则说明

剑指offer(四十四)之两个链表的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点. 思路分析:将其中一个链表结点,存进HashMap中,将利用ContainsKey()进行判断是否有公共结点 代码1: <span style="color:#6600cc;">import java.util.*; public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode

剑指offer(四十八)之复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 代码: <span style="color:#000099;">import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public class Solution { public RandomListNod

剑指offer(四十五)之二叉树的深度

题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 代码: <span style="color:#993399;">public class Solution { public int TreeDepth(TreeNode pRoot){ if(pRoot==null) return 0; return getDepth(pRoot,0); } private int getDepth(Tre

剑指offer(四十二)之左旋转字符串

题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! <span style="color:#33cc00;">public class Solution { public String L

剑指offer(五十四)之字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l". 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符. 思路: 使用一个HashMap来统计字符出现的次数,同时用一个ArrayList来记录输入流,每次返回第一个出现一次的字符都是在这个Array

剑指offer(六十五)之矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子. 代码: /*

【剑指offer】十四,栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 代码如下: 1 import java.util.Stack; 2 3 public class Solution { 4 public boolean IsPopOrder(int [] pushA,int [] popA