1018. Binary Prefix Divisible By 5
leetcode easy
Task
Вам дан двоичный массив nums (индексированный 0). Мы определяем xi как число, двоичным представлением которого является подмассив nums[0..i] (от старшего бита к младшему). Например, если nums = [1,0,1], то x0 = 1, x1 = 2 и x2 = 5. Верните массив булевых чисел answer, где answer[i] истинно, если xi делится на 5.
Пример:
Input: nums = [0,1,1]
Output: [true,false,false]
C# solution
matched/originalpublic class Solution {
public bool[] PrefixesDivBy5(int[] nums) {
int x = 0;
bool[] answer = new bool[nums.Length];
for (int i = 0; i < nums.Length; i++) {
x = (x * 2 + nums[i]) % 5;
answer[i] = x == 0;
}
return answer;
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool[] PrefixesDivBy5(vector<int>& nums) {
int x = 0;
bool[] answer = new bool[nums.size()];
for (int i = 0; i < nums.size(); i++) {
x = (x * 2 + nums[i]) % 5;
answer[i] = x == 0;
}
return answer;
}
}Java solution
auto-draft, review before submitimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public boolean[] PrefixesDivBy5(int[] nums) {
int x = 0;
boolean[] answer = new boolean[nums.length];
for (int i = 0; i < nums.length; i++) {
x = (x * 2 + nums[i]) % 5;
answer[i] = x == 0;
}
return answer;
}
}JavaScript solution
matched/originalclass Solution {
prefixesDivBy5(nums) {
let x = 0;
const answer = [];
for (const num of nums) {
x = (x * 2 + num) % 5;
answer.push(x === 0);
}
return answer;
}
}Python solution
matched/originalclass Solution:
def prefixesDivBy5(self, nums: List[int]) -> List[bool]:
x = 0
answer = []
for num in nums:
x = (x * 2 + num) % 5
answer.append(x == 0)
return answerGo solution
matched/originalfunc prefixesDivBy5(nums []int) []bool {
x := 0
answer := make([]bool, len(nums))
for i, num := range nums {
x = (x * 2 + num) % 5
answer[i] = x == 0
}
return answer
}Explanation
Algorithm
Инициализация и вычисление:
Создайте переменную x для хранения текущего числа в десятичной системе.
Создайте пустой массив answer для хранения результатов делимости на 5.
Итерация по массиву:
Пройдите по всем элементам массива nums. Для каждого элемента:
Обновите значение x, учитывая текущий бит.
Проверяйте, делится ли x на 5, и добавьте результат (true или false) в массив answer.
Чтобы избежать переполнения, используйте модуль 5 для переменной x.
Возврат результата:
Верните массив answer с результатами проверки делимости на 5.
😎