diff --git a/problems/self-dividing-numbers/self_dividing_numbers.go b/problems/self-dividing-numbers/self_dividing_numbers.go index faaf59ac7..b1af5a206 100644 --- a/problems/self-dividing-numbers/self_dividing_numbers.go +++ b/problems/self-dividing-numbers/self_dividing_numbers.go @@ -1 +1,15 @@ package self_dividing_numbers + +func selfDividingNumbers(left int, right int) []int { + ans := make([]int, 0) +flag: + for i := left; i <= right; i++ { + for x := i; x > 0; x /= 10 { + if d := x % 10; d == 0 || i%d != 0 { + continue flag + } + } + ans = append(ans, i) + } + return ans +} diff --git a/problems/self-dividing-numbers/self_dividing_numbers_test.go b/problems/self-dividing-numbers/self_dividing_numbers_test.go index faaf59ac7..74a8ad5c5 100644 --- a/problems/self-dividing-numbers/self_dividing_numbers_test.go +++ b/problems/self-dividing-numbers/self_dividing_numbers_test.go @@ -1 +1,28 @@ package self_dividing_numbers + +import ( + "reflect" + "testing" +) + +type caseType struct { + left int + right int + expected []int +} + +func TestSelfDividingNumbers(t *testing.T) { + tests := [...]caseType{ + { + left: 1, + right: 22, + expected: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22}, + }, + } + for _, tc := range tests { + output := selfDividingNumbers(tc.left, tc.right) + if !reflect.DeepEqual(output, tc.expected) { + t.Fatalf("input: %v %v, output: %v, expected: %v", tc.left, tc.right, output, tc.expected) + } + } +}