Count Good Numbers LeetCode solution in Java

1
class Solution {
2
int mod = (int) 1e9 + 7;
3

4
public int countGoodNumbers(long n) {
5
long first =
6
(n % 2 == 0 ? (n / 2) : (n / 2) + 1); // deciding n/2 or n/2+1 depending on n is even or odd
7
long second = n / 2; // second power would be n/2 only irrespective of even or odd
8
long mul1 = power(5, first) % mod; // 5 power n/2
9
long mul2 = power(4, second) % mod; // 4 power n/2
10
long ans = 1;
11
ans = (ans * mul1) % mod; // computing total product
12
ans = (second != 0) ? (ans * mul2) % mod : ans; // computing total product
13
return (int) (ans % mod);
14
}
15

16
public long power(
17
long x, long y) { // this method computes pow(x,y) in O(logn) using divide & conquer
18
long temp;
19
if (y == 0) return 1; // base case (x power 0 = 1)
20
temp = power(x, y / 2); // computing power for pow(x,y/2) -> divide & conquer step
21
if (y % 2 == 0)
22
return (temp * temp)
23
% mod; // using that result of subproblem (2 power 2 = 2 power 1 * 2 power 1)
24
else
25
return (x * temp * temp)
26
% mod; // using that result of subproblem (2 power 3 = 2 power 1 * 2 power 1 * 2)
27
// if y is odd, x power y = x power y/2 * x power y/2 * x
28
// if y is even, x power y = x power y/2 * x power y/2
29
}
30
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0