728. Self Dividing Numbers
LeetCode の挑戦ログ
Problem
https://leetcode.com/problems/self-dividing-numbers/
- 整数の範囲が渡される
- 範囲の中から、自身の桁ごとの数字で割り切れる値を抽出する
- 0 を含む値は除外する
Solution
class Solution { public List<Integer> selfDividingNumbers(int left, int right) { return IntStream.range(left, right + 1) .mapToObj(DividingNumber::new) .filter(DividingNumber::isSelfDividingNumber) .map(DividingNumber::getValue) .collect(Collectors.toList()); } } class DividingNumber { private int value; DividingNumber(int value) { this.value = value; } boolean isSelfDividingNumber() { return Arrays.stream(split(value)).allMatch(i -> i != 0 && this.value % i == 0); } int getValue() { return value; } private int[] split(int num) { String s = String.valueOf(num); int[] split = new int[s.length()]; for (int i = 0; i < s.length(); i++) { split[i] = Character.getNumericValue(s.charAt(i)); } return split; } @Override public String toString() { return "DividingNumber{" + "value=" + value + '}'; } }
Impressions
- 元の値と桁ごとの値を同時に扱うようにしたので、箱としてクラスを作った
- 範囲用に
Stream#range
がある - allMatch の存在を忘れて filter と count でどうにかしようとしちゃう