浅述 | Leetcode1281 整数的各位积和之差

1. 题目描述

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。
示例 1:
输入:n = 234
输出:15
解释:
各位数之积 = 2 * 3 * 4 = 24
各位数之和 = 2 + 3 + 4 = 9
结果 = 24 - 9 = 15
示例 2:
输入:n = 4421
输出:21
解释:
各位数之积 = 4 * 4 * 2 * 1 = 32
各位数之和 = 4 + 4 + 2 + 1 = 11
结果 = 32 - 11 = 21
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subtract-the-product-and-sum-of-digits-of-an-integer

2. 解题思路(采用JavaScript语言)

(1)对 n 进行取余整除

var subtractProductAndSum = function(n) {
    var x = 1;
    var y = 0;
    while(true){
        if(n === 0){
            break;
        }
        x = x * (n % 10);
        y = y + (n % 10);
        n = Math.floor(n / 10);
    }
    return x-y;
};

算法分析:
时间复杂度为 O(1),执行用时 : 56 ms,内存消耗 : 34.2 MB
将 n 与10取模得的个位数字,再将 n 除以 10 并利用 Math.floor() 向下取整得删去个位数字后剩下的数字,循环进行,直到 n 为个位数(即 Math.floor(n / 10) == 0 )为止 。
(2)将 n 转换为字符串

var subtractProductAndSum = function(n) {
    n = "" + n;
    var x = 1;
    var y = 0;
    var arr = n.split("");
    for(var i = 0; i < arr.length; i++){
        x = x * Number(arr[i]);
        y = y + Number(arr[i]);
    }
    return x-y;
};

算法分析:
时间复杂度为 O(1),执行用时 : 68 ms,内存消耗 : 34.3 MB
将 n 转换为字符串,在用 split() 方法将字符串按各字符存在数组里,注意要将数组中的各个字符转换为Number类型,再进行相乘或相加。

感谢您的阅读,如有误,望指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值