LeetCode 902 题解

https://leetcode.com/problems/numbers-at-most-n-given-digit-set/description/

题目大意:给你 1-9 之间的数字,可以重复使用组合,问小于N的组合数。

解题思路: N的长度为n,k为可以使用的数的个数,当要组合的数长度小于n的时候,组合数目为 pow(k,i) (i

当长度为n的时候,dp[i] 表示第i位 之前的位置和N相同,i位之后的数可以组合的个数,当第i位 选择和N的i位相同的数字的时候,dp[i]+=dp[i+1] ,当小于的时候,i 位 之后可以随便组合 dp[i]+= pow(k, n-i-1) 。

class Solution {
public:
    int atMostNGivenDigitSet(vector& D, int N) {
        string s = to_string(N);
        int n = s.size();
        int m = D.size();
        int dp[n+1];
        memset(dp,0,sizeof(dp));
        dp[n]=1;
        for(int i=n-1;i>=0;i--)
        {
            int tmp = s[i]-'0';
            for(int j=0;j

 

你可能感兴趣的:(leetcode)