The k-beauty of an integer num
is defined as the number of substrings of num
when it is read as a string that meet the following conditions:
- It has a length of
k
. - It is a divisor of
num
.
Given integers num
and k
, return the k-beauty of num
.
Note:
- Leading zeros are allowed.
0
is not a divisor of any value.
A substring is a contiguous sequence of characters in a string.
Example 1:
Input: num = 240, k = 2 Output: 2 Explanation: The following are the substrings of num of length k: - "24" from "240": 24 is a divisor of 240. - "40" from "240": 40 is a divisor of 240. Therefore, the k-beauty is 2.
Example 2:
Input: num = 430043, k = 2 Output: 2 Explanation: The following are the substrings of num of length k: - "43" from "430043": 43 is a divisor of 430043. - "30" from "430043": 30 is not a divisor of 430043. - "00" from "430043": 0 is not a divisor of 430043. - "04" from "430043": 4 is not a divisor of 430043. - "43" from "430043": 43 is a divisor of 430043. Therefore, the k-beauty is 2.
Constraints:
1 <= num <= 109
1 <= k <= num.length
(takingnum
as a string)
Related Topics:
Math, String, Sliding Window
// OJ: https://leetcode.com/problems/find-the-k-beauty-of-a-number
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(N)
class Solution {
public:
int divisorSubstrings(int n, int k) {
auto s = to_string(n);
long long val = 0, p = 1, ans = 0;
for (int i = 0; i < s.size(); ++i) {
val = val * 10 + s[i] - '0';
if (i < k) p *= 10;
else val -= (s[i - k] - '0') * p;
if (i >= k - 1) ans += val && n % val == 0;
}
return ans;
}
};