leetcode每日一题2575

文章介绍了如何使用C++实现一个名为`divisibilityArray`的函数,用于判断给定字符串表示的整数对给定模m是否可整除。原始方法有O(N)的时间复杂度,通过优化思路,利用整数表示性质,将时间复杂度降低。
摘要由CSDN通过智能技术生成

 一.题目概述

二.代码

class Solution {
public:
    vector<int> divisibilityArray(string word, int m) {
        vector<int> v;
        long long ret = 0;
        for (char& ch : word) {
            ret = (ret * 10 + (ch - '0')) % m;
            v.push_back(ret == 0 ? 1 : 0);
        }
        return  v;
    }
};

三.思路优化

我们第一思路是每次从左往右拿一个数与之前的数组合然后整除,如果可以整除,那么到i这里的word[i]就可以改成1,但是这样的时间复杂度到了O(N);

优化:

一个整数我们可以表示为n=a*10+b

我们要知道n%d=(x%d+y%d)%d

所以n%d=(a%d*10+b%d)%d

所以我们不必要每个数表示出来再进行整除操作,可以一边从左往右数字扩展一边计算出来整除的值。 

从左到右遍历word,初始化ret=0;每次遇到一个数字x,就把数字ret更新为(ret*10+x)%d

ret是乘和加出来的,防止过大,用long long 存

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值