整数中1出现的次数(从1到n整数中1出现的次数)&&把数组排成最小的数

    xiaoxiao2023-11-18  144

    整数中1出现的次数(从1到n整数中1出现的次数)

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

    解题思路

    判断1~n上每个数的1的个数;通过取余整除的方式求出1的个数

    代码

    /** * 剑指offer一刷:整数中1出现的次数(从1到n整数中1出现的次数) * * @author User * @create 2019-05-25-18:52 */ public class jzo31 { public int NumberOf1Between1AndN_Solution(int n) { if (n<1){ return 0; } int count=0; for (int i=0;i!=n+1;i++){ count+=getNums(i); } return count; } public int getNums(int num){ int res=0; while (num!=0){ if (num==1){ //取余 res++; } num/=10; //整除 } return res; } public static void main(String[] args){ int n=13; jzo31 so=new jzo31(); System.out.println(so.NumberOf1Between1AndN_Solution(n)); } }

    把数组排成最小的数

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    解题思路

    重写了Arrays的compare的方法(Collections中的sort也是调用的Arrays中的compare方法),对三个数进行了排序;

    代码

    import java.util.*; /** * 剑指offer一刷:把数组排成最小的数 * * @author User * @create 2019-05-25-19:33 */ public class jzo32 { public String PrintMinNumber(int [] numbers) { if (numbers==null||numbers.length==0){ return ""; } int len=numbers.length; String[] str=new String[len]; StringBuilder StrB=new StringBuilder(); for (int i=0;i<len;i++){ str[i]=String.valueOf(numbers[i]); } Arrays.sort(str, new Comparator<String>() { @Override public int compare(String o1, String o2) { String s1=o1+o2; String s2=o2+o1; return s1.compareTo(s2); } }); for (int i=0;i<len;i++){ StrB.append(str[i]); } return StrB.toString(); } public String PrintMinNumber1(int [] numbers) { int n; String s=""; ArrayList<Integer> list=new ArrayList<>(); n=numbers.length; for (int i=0;i<n;i++){ list.add(numbers[i]); } Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { String s1=o1+""+o2; String s2=o2+""+o1; return s1.compareTo(s2); } }); for(int j:list){ s+=j; } return s; } public static void main(String[] args){ int[] n={2,31,321}; jzo32 so=new jzo32(); System.out.println(so.PrintMinNumber(n)); System.out.println(so.PrintMinNumber1(n)); } }
    最新回复(0)