Skip to content

Latest commit

 

History

History

2269

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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 (taking num as a string)

Companies: Quora, Postmates

Related Topics:
Math, String, Sliding Window

Solution 1.

// 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;
    }
};