Given a range [L, R], the task is to count the numbers which have even number of odd digits and odd number of even digits. For example,
- 8 has 1 even digit and 0 odd digit – Satisfies the condition since 1 is odd and 0 is even.
- 545 has 1 even digit and 2 odd digits – Satisfies the condition since 1 is odd and 2 is even.
- 4834 has 3 even digits and 1 odd digit – Does not satisfy the condition since there are odd numbers(i.e 1) of odd digits.
Input: L = 1, R = 9
2, 4, 6 and 8 are the only integers from the
given range that satisfy the given conditions.
Input: L = 1, R = 19
Input: L = 123, R = 984
- Case 1
There is a pattern in which these numbers occur between and (where 1<=k<=18).
Number of occurrences from
- 1 – 10 and 1 – 100 are 4
- 1 – 1000 and 1 – 10000 are 454
- 1 – 10000 and 1 – 100000 are 45454
and so on…
- Case 2
- If the number of digits in a number is even then it cannot satisfy the given condition because we need an odd number(of digits) and an even number(of digits) to satisfy our condition and odd number + even number is always odd
- So if the number of digits for a given number(say n) is even then its number of occurrences from 1 is equal to the number of occurrences from to largest (1<=k<=18) which is less than n
Let n = 19, number of digits in 19 are 2
Therefore number of occurrences from 1 – 19 = number of occurrences from 1 – 10 (since 10 the largest less than 19)
- Case 3
If number of digits for a given number(say n) are odd then number of occurrences between and n is equal to
where is the largest less than n.
Implementation: Now we now how to calculate the number of occurrences from 1 to given n. Therefore,
Number of occurrences from L to R = NumberOfOccurrencesUpto(R) – NumberOfOccurrencesUpto(L – 1) where L is not equal to 1.
Below is the implementation of the above approach:
Time Complexity: O(logn)