写点什么

【LeetCode】找到一个数字的 K 美丽值 Java 题解

作者:HQ数字卡
  • 2022 年 6 月 15 日
  • 本文字数:1011 字

    阅读完需:约 3 分钟

题目描述

一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目:


子字符串长度为 k 。子字符串能整除 num 。给你整数 num 和 k ,请你返回 num 的 k 美丽值。


注意:


允许有 前缀 0 。0 不能整除任何值。一个 子字符串 是一个字符串里的连续一段字符序列。


示例 1:
输入:num = 240, k = 2输出:2解释:以下是 num 里长度为 k 的子字符串:- "240" 中的 "24" :24 能整除 240 。- "240" 中的 "40" :40 能整除 240 。所以,k 美丽值为 2 。示例 2:
输入:num = 430043, k = 2
输出:2解释:以下是 num 里长度为 k 的子字符串:- "430043" 中的 "43" :43 能整除 430043 。- "430043" 中的 "30" :30 不能整除 430043 。- "430043" 中的 "00" :0 不能整除 430043 。- "430043" 中的 "04" :4 不能整除 430043 。- "430043" 中的 "43" :43 能整除 430043 。所以,k 美丽值为 2 。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/find-the-k-beauty-of-a-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是数组题目,题目自定义了一种算法,需要我们找出满足算法条件的组合数。

  • 自定义算法的条件有 1. 子字符串 是一个字符串里的连续一段字符序列。2. 子字符串长度为 k 。能整除 num。根据这两个条件,我们开始实现逻辑编码。由于输入的 num, 求子字符串的时候比较繁琐,因此,可以把 num 转换成字符串。然后实用 substring 函数来切割字符串。需要注意的是 public String substring(int beginIndex, int endIndex) {} ,这里的返回值是包含 beginIndex,不包含 endIndex 的。举个更加直观的例子,"smiles".substring(1, 5) returns "mile"。实现代码如下,供参考。

通过代码

class Solution {    public int divisorSubstrings(int num, int k) {        int ans = 0;        String s = String.valueOf(num);        int n = s.length();        for (int i = 0; i + k - 1 < n; i++) {            String temp = s.substring(i, i + k);            if (Integer.parseInt(temp) == 0){                continue;            }            if (num % Integer.parseInt(temp) == 0) {                ans++;            }        }
return ans; }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】找到一个数字的 K 美丽值Java题解_LeetCode_HQ数字卡_InfoQ写作社区