返回介绍

solution / 1000-1099 / 1018.Binary Prefix Divisible By 5 / README

发布于 2024-06-17 01:03:32 字数 2990 浏览 0 评论 0 收藏 0

1018. 可被 5 整除的二进制前缀

English Version

题目描述

给定一个二进制数组 nums索引从0开始 )。

我们将xi 定义为其二进制表示形式为子数组 nums[0..i] (从最高有效位到最低有效位)。

  • 例如,如果 nums =[1,0,1] ,那么 x0 = 1x1 = 2, 和 x2 = 5

返回布尔值列表 answer,只有当 xi_ _可以被 5 整除时,答案 answer[i] 为 true,否则为 false

 

示例 1:

输入:nums = [0,1,1]
输出:[true,false,false]
解释:
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为 true 。

示例 2:

输入:nums = [1,1,1]
输出:[false,false,false]

 

提示:

  • 1 <= nums.length <= 105 
  • nums[i] 仅为 0 或 1

解法

方法一:模拟

遍历数组,每一次遍历都将当前数字加到前面的数字上,然后对 $5$ 取模,如果结果为 $0$,则当前数字可以被 $5$ 整除,答案设置为 true,否则为 false

时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组长度。

class Solution:
  def prefixesDivBy5(self, nums: List[int]) -> List[bool]:
    ans = []
    x = 0
    for v in nums:
      x = (x << 1 | v) % 5
      ans.append(x == 0)
    return ans
class Solution {
  public List<Boolean> prefixesDivBy5(int[] nums) {
    List<Boolean> ans = new ArrayList<>();
    int x = 0;
    for (int v : nums) {
      x = (x << 1 | v) % 5;
      ans.add(x == 0);
    }
    return ans;
  }
}
class Solution {
public:
  vector<bool> prefixesDivBy5(vector<int>& nums) {
    vector<bool> ans;
    int x = 0;
    for (int v : nums) {
      x = (x << 1 | v) % 5;
      ans.push_back(x == 0);
    }
    return ans;
  }
};
func prefixesDivBy5(nums []int) (ans []bool) {
  x := 0
  for _, v := range nums {
    x = (x<<1 | v) % 5
    ans = append(ans, x == 0)
  }
  return
}
function prefixesDivBy5(nums: number[]): boolean[] {
  const ans: boolean[] = [];
  let x = 0;
  for (const v of nums) {
    x = ((x << 1) | v) % 5;
    ans.push(x === 0);
  }
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文