Google面试题:数字计数

来源:互联网 发布:中国软件 综合排名 编辑:程序博客网 时间:2024/06/05 19:27

题目


题目来源:Link




分析




代码


package com.graph;import java.util.*;public class Solution{List<Integer> factorial = new ArrayList<Integer>();public int solve(int n){if (n==0) {//易遗漏return 1;}if(n>10) n=11;n++;//转成实际位数factorial.add(1);//n<=10int[] nums = new int[n+1];int t=1;int res=0;for(; t<n; t++){if(t==1) {//易遗漏nums[t] = 10;}else {//对于首位,为1~9种选择//剩下t-1位,为9种选择nums[t] = 9*(getFactorial(9)/getFactorial(9-(t-1)));//之前考虑遗漏被除数}res = res+nums[t];}System.out.println(res);return res;}int getFactorial(int fac){int size = factorial.size();if(fac<=size){return factorial.get(fac-1);}for(int i=size+1; i<=fac; i++){int topIndex = factorial.size()-1;int tmp = factorial.get(topIndex)*i;factorial.add(tmp);}return factorial.get(factorial.size()-1);}//优化方法,参考原始题目代码//动态规划public int solve_dp(int n) {//不能理解题给的公式return 0;}//排列组合public int solve_pe(int n) {if(n==0) return 1;if(n>10) n=10;int ans = 1;int mul = 9;for(int i=n-1; i>=0; i--) {if(i==0) {ans+=mul;}else {ans+=(n-i+1)*mul;}mul = mul*(10-n+i-1);}return ans;}public static void main(String[] args) {Solution s = new Solution();s.solve(2);//s.solve(new int[] {1,2,4,8,7,9,6,3});}}


原创粉丝点击