step num 问题

简介: step num 问题

题目

定义何为step sum?
比如680,680 + 68 + 6 = 754,680的step sum叫754
给定一个正数num,判断它是不是某个数的step sum

解题思路

image.png
一个数X它的步骤和叫甲,一个数Y它的步骤和叫乙。
我首先有一个推论,如果Y>X,它的步骤和乙只可能大于甲。
image.png

二分
如果中间数的步骤和小于目标,则在1-mid中进行二分
如果中间数的二分和大于目标,则在mid+1-target进行二分
如果你二分都没有了,也没得到7268,说明这个7268不是任何数的步骤和
这个思想传统来自一个名词叫单调性,就往单调性上靠,给你提升了一点点单调性的敏感度

代码

    public static boolean isStepSum(int stepSum) {
        int L = 0;
        int R = stepSum;
        int M = 0;
        int cur = 0;
        while (L <= R) {
            M = L + ((R - L) >> 1);
            cur = stepSum(M);
            if (cur == stepSum) {
                return true;
            } else if (cur < stepSum) {
                L = M + 1;
            } else {
                R = M - 1;
            }
        }
        return false;
    }

    public static int stepSum(int num) {
        int sum = 0;
        while (num != 0) {
            sum += num;
            num /= 10;
        }
        return sum;
    }

总结

我们首先使用打表法来找出如果X大于Y,则X的步骤和也大于Y的步骤和这个结论
有了这个结论后,我们发现了其中的单调性,我们就可以使用二分了

相关文章
range() 函数
`range()`函数在Julia中生成指定范围和步长的序列。它可以有四个参数:`start`(起始值),`stop`(结束值),`length`(长度)和`step`(步长)。例如,`range(1, stop=100)`产生从1到100的序列。如果`length`未指定,序列会在接近`stop`但能被`step`整除的位置结束。`collect()`与`range()`结合使用可创建数组。示例展示了不同参数组合下的序列生成,并将其转换为数组。
|
6月前
|
Linux Windows
【已解决】ValueError: num_samples should be a positive integer value, but got num_samples=0
【已解决】ValueError: num_samples should be a positive integer value, but got num_samples=0
|
6月前
|
机器学习/深度学习 JavaScript 算法
GAN Step By Step -- Step7 WGAN
GAN Step By Step -- Step7 WGAN
GAN Step By Step -- Step7 WGAN
|
机器学习/深度学习 编解码 计算机视觉
GAN Step By Step -- Step5 ACGAN
GAN Step By Step -- Step5 ACGAN
GAN Step By Step -- Step5 ACGAN
|
机器学习/深度学习
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
成功解决but is 0 and 2 (computed from start 0 and end 9223372 over shape with rank 2 and stride-1)
成功解决but is 0 and 2 (computed from start 0 and end 9223372 over shape with rank 2 and stride-1)
|
算法 索引 Python
为什么 x in range(1000000000000001) 的执行速度这么快
为什么 x in range(1000000000000001) 的执行速度这么快
74 0
if语句中(num=X)和(num==X)的区别
if语句中(num=X)和(num==X)的区别
108 0
if语句中(num=X)和(num==X)的区别
range
range() 是一个函数,可以用来生成一个自然数的序列。 该函数需要三个参数:起始位置(可以省略,默认是 0);结束位置;步长(可以省略,默认是 1)。 通过 range() 可以创建一个执行指定次数的 for 循环。
108 0
range
|
机器学习/深度学习
GAN Step By Step -- Step6 LSGAN
GAN Step By Step -- Step6 LSGAN
GAN Step By Step -- Step6 LSGAN