Участник:Batyrzhan/Numbers With Repeated Digits — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
 
Строка 1: Строка 1:
 
https://leetcode.com/problems/numbers-with-repeated-digits
 
https://leetcode.com/problems/numbers-with-repeated-digits
  
<code-cpp>
+
<code-java>
 
class Solution {
 
class Solution {
 
     public int numDupDigitsAtMostN(int N) {
 
     public int numDupDigitsAtMostN(int N) {
Строка 27: Строка 27:
 
     }
 
     }
 
     }
 
     }
</code-cpp>
+
</code-java>
 
+
[[Участник:StasFomin|StasFomin]] 15:59, 25 мая 2020 (MSK): {{@| Под каким языком компилировать? С++ не скомпилировался на LeetCode}}
+

Текущая версия на 22:22, 25 мая 2020

https://leetcode.com/problems/numbers-with-repeated-digits

class Solution {
    public int numDupDigitsAtMostN(int N) {
        char[] s = String.valueOf(N + 1).toCharArray();
        int n = s.length, ans = 0;
        for (int i = 1; i < n; i++) {
            ans += 9 * A(9, i - 1); 
        }
        Set<Character> seen = new HashSet<>();
        for (int i = 0; i < n; i++) {
            for (char j = i > 0 ? '0' : '1'; j < s[i]; j++) {
                if (!seen.contains(j)) {
                    ans += A(9 - i, n - i - 1);
                }
            }
            if (seen.contains(s[i])) {
                break;
            }
            seen.add(s[i]);
        }
        return N - ans;
    }
    private int A(int m, int n) {
        return n == 0 ? 1 : A(m, n - 1) * (m - n + 1);
    }
    }