Unlucky number 13

前端 未结 6 956
面向向阳花
面向向阳花 2021-01-18 06:37

I came across this problem Unlucky number 13! recently but could not think of efficient solution this.

Problem statement :

N is taken as input.

6条回答
  •  盖世英雄少女心
    2021-01-18 07:12

    This a P&C problem. I'm going to assume 0 is valid string and so is 00, 000 and so on, each being treated distinct from the other.

    The total number of strings not containing 13, of length N, is unsurprisingly given by:

    (Total Number of strings of length N) - (Total number of strings of length N that have 13 in them)
    

    Now, the Total number of strings of length N is easy, you have 10 digits and N slots to put them in: 10^N.

    The number of strings of length N with 13 in them is a little trickier. You'd think you can do something like this:

    => (N-1)C1 * 10^(N-2)
    => (N-1) * 10^(N-2)
    

    But you'd be wrong, or more accurately, you'd be over counting certain strings. For example, you'd be over counting the set of string that have two or more 13s in them.

    What you really need to do is apply the inclusion-exclusion principle to count the number of strings with 13 in them, so that they're all included once.

    If you look at this problem as a set counting problem, you have quite a few sets:

    S(0,N): Set of all strings of Length N.
    S(1,N): Set of all strings of Length N, with at least one '13' in it.
    S(2,N): Set of all strings of Length N, with at least two '13's in it.
    ...
    S(N/2,N): Set of all strings of Length N, with at least floor(N/2) '13's in it.
    

    You want the set of all strings with 13 in them, but counted at most once. You can use the inclusion-exclusion principle for computing that set.

提交回复
热议问题