1281. 整数的各位积和之差

70 阅读2分钟

一开始做这个题的时候有点懵懵的,后面理了下思路,踩了几个坑完成了 然后看力扣的解析没有java的答案,评论区大佬的答案都是高度精简的,把判断位数还有计算合并到一起了,也不考虑保存 然后就用这个贴记录下思路

这是我个人的思路

class Solution {
    public int subtractProductAndSum(int n) {
        int bit = 0;
        int temp = n;
        // 判断一个数的位数
        while(temp>0){
            temp /= 10 ;
            ++bit; 
        }
        // 按位保存到数组里
        int array[] = new int[bit];
        for(int i=0;i< array.length ;i++){
            array[array.length -1 -i] = (int) (n / Math.pow(10, i) %10);
        }
        // 取出数组的数进行计算
        int sum = 0;
        int num = 1;
        for(int j : array){
            sum += j;
            num *= j;
        }
        return num - sum;
    }
}

这是力扣评论区点赞最高的大佬的答案

class Solution {
    public int subtractProductAndSum(int n) {
        int sum = 0;
        int product = 1;
        while (n > 0) {
            int num = n % 10;
            sum += num;
            product *= num;
            n /= 10;
        }
        return product - sum;
    }
}

作者:hncboy
链接:https://leetcode.cn/problems/subtract-the-product-and-sum-of-digits-of-an-integer/solution/java-qu-yu-ji-suan-by-hncboy/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一开始只是拿他的输入n,234来进行分析的,后来发现这是需要对任意整数来进行分析的,然后花了点时间,首先就是判断整数位数,分析发现除10就好了,个位除10一定是小数,这个时候自动转为int类型,就是0,然后加个标志bit就好了,除一次10就自动累加一次,因为不知道循环次数所以用while循环,循环条件方面,因为最终的值为0,整数又是大于零,也就是说正常情况下是大于零,为0和小于零都是不满足条件的,所以循环条件为大于零

然后就是按位保存,想了一下这个不就是跟字符串差不多么,字符串本质就是字符数组,一串数字也可以当作整数数组处理,后面有需要还可以转换成字符串,再转换成数字都是很方便的,就分开放到整数数组里了

最后计算就直接foreach就好了