码迷,mamicode.com
首页 > 其他好文 > 详细

由最多N个给定数字集组成的数字 Numbers At Most N Given Digit Set

时间:2019-10-14 23:35:33      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:for   its   inf   数学   while   idt   als   alt   ber   

2019-10-14 22:21:29

问题描述

技术图片

 

技术图片 

问题求解

暴力求解必然会超时,那么就需要考虑数学的方法来降低时间复杂度了。

    public int atMostNGivenDigitSet(String[] D, int N) {
        int n = D.length;
        int res = 0;
        char[] chs = new char[n];
        for (int i = 0; i < n; i++) {
            chs[i] = D[i].charAt(0);
        }
        char[] nums = String.valueOf(N).toCharArray();
        int len = nums.length;
        for (int i = 1; i < len; i++) res += Math.pow(n, i);
        int i = 0;
        while (i < len) {
            for (char c : chs) {
                if (c < nums[i]) res += Math.pow(n, len - i - 1);
            }
            if (!isIn(nums[i], chs)) break;
            i++;
        }
        return i == len ? res + 1 : res;
    }

    private boolean isIn(char c, char[] chs) {
        for (char ch : chs) {
            if (ch == c) return true;
        }
        return false;
    }

  

 

由最多N个给定数字集组成的数字 Numbers At Most N Given Digit Set

标签:for   its   inf   数学   while   idt   als   alt   ber   

原文地址:https://www.cnblogs.com/hyserendipity/p/11674626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!