Skip to content

Commit c9a10c6

Browse files
committed
leetcode
1 parent b7a7ab0 commit c9a10c6

File tree

4 files changed

+251
-0
lines changed

4 files changed

+251
-0
lines changed

AddDigits/add_digits.dart

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
3+
-* Add Digits *-
4+
5+
Given an integer num, repeatedly add all its digits until the result has only one digit, and return it.
6+
7+
8+
9+
Example 1:
10+
11+
Input: num = 38
12+
Output: 2
13+
Explanation: The process is
14+
38 --> 3 + 8 --> 11
15+
11 --> 1 + 1 --> 2
16+
Since 2 has only one digit, return it.
17+
Example 2:
18+
19+
Input: num = 0
20+
Output: 0
21+
22+
23+
Constraints:
24+
25+
0 <= num <= 231 - 1
26+
27+
28+
Follow up: Could you do it without any loop/recursion in O(1)
29+
30+
31+
*/
32+
// class Solution {
33+
// // The problem, widely known as digit root problem, has a congruence formula:
34+
// int addDigits(int num) {
35+
// return num % 9 == 0 && num > 0 ? 9 : num % 9;
36+
// }
37+
// }
38+
39+
// class B {
40+
// int addDigits(int num) {
41+
// if (num == 0) return 0;
42+
// return num % 9 == 0 ? 9 : num % 9;
43+
// }
44+
// }
45+
46+
// // Recursion
47+
// class C {
48+
// int addDigits(int num) {
49+
// String s = num.toString();
50+
// int sum = 0;
51+
// for (int i = 0; i < s.length; i++) {
52+
// sum += s[i].codeUnitAt(0) - '0'.codeUnitAt(0);
53+
// }
54+
// if (sum > 9) return addDigits(sum);
55+
// return sum;
56+
// }
57+
// }
58+
59+
// class D {
60+
// int addDigits(int num) {
61+
// int x = num;
62+
// int sum = 0;
63+
// while (x != 0) {
64+
// sum = sum + x % 10;
65+
// x = x ~/ 10;
66+
// if (x == 0 && sum > 9) {
67+
// x = sum;
68+
// sum = 0;
69+
// }
70+
// }
71+
// return sum;
72+
// }
73+
// }
74+
75+
class A {
76+
// The problem, widely known as digit root problem, has a congruence formula:
77+
int addDigits(int num) {
78+
if (num == 0) return 0;
79+
if (num % 9 == 0) return 9;
80+
return num % 9;
81+
}
82+
}
83+
84+
class B {
85+
int addDigits(int num) {
86+
while (num > 9) {
87+
int leftNum = num ~/ 10;
88+
int rightNum = num % 10;
89+
num = leftNum + rightNum;
90+
}
91+
return num;
92+
}
93+
}
94+
95+
class C {
96+
List<int> digits(int num) {
97+
List<int> result = [];
98+
if (num == 0) {
99+
return [0];
100+
}
101+
while (num != 0) {
102+
result.add(num % 10);
103+
num ~/= 10;
104+
}
105+
return result;
106+
}
107+
108+
int addDigits(int num) {
109+
var digitList = digits(num);
110+
while (digitList.length > 1) {
111+
int sum = 0;
112+
for (int d in digitList) {
113+
sum += d;
114+
}
115+
digitList = digits(sum);
116+
}
117+
return digitList[0];
118+
}
119+
}
120+
121+
class D {
122+
int addDigits(int num) {
123+
int sum = 0;
124+
if (num == 0) {
125+
return 0;
126+
}
127+
128+
while (num > 0) {
129+
if ((sum + num % 10) > 9) {
130+
sum = 1 + (sum + num % 10) % 10;
131+
} else
132+
sum += num % 10;
133+
134+
num = num ~/ 10;
135+
}
136+
137+
return sum;
138+
}
139+
}

AddDigits/add_digits.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package main
2+
3+
func addDigits(num int) int {
4+
if num == 0 {
5+
return 0
6+
}
7+
if num%9 == 0 {
8+
return 9
9+
}
10+
return num % 9
11+
}

AddDigits/add_digits.md

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# 🔥 Add Digits 🔥 || 5 Solutions || Simple Fast and Easy
2+
3+
## The problem, widely known as digit root problem, has a congruence formula
4+
5+
## Solution - 1 Mathematical Congruence Formula
6+
7+
```dart
8+
class Solution {
9+
int addDigits(int num) {
10+
if (num == 0) return 0;
11+
if (num % 9 == 0) return 9;
12+
return num % 9;
13+
}
14+
}
15+
```
16+
17+
## Solution - 2 Two Pointers
18+
19+
```dart
20+
class Solution {
21+
int addDigits(int num) {
22+
while (num > 9) {
23+
int leftNum = num ~/ 10;
24+
int rightNum = num % 10;
25+
num = leftNum + rightNum;
26+
}
27+
return num;
28+
}
29+
}
30+
```
31+
32+
## Solution - 3 Using Array
33+
34+
```dart
35+
class Solution {
36+
List<int> digits(int num) {
37+
List<int> result = [];
38+
if (num == 0) {
39+
return [0];
40+
}
41+
while (num != 0) {
42+
result.add(num % 10);
43+
num ~/= 10;
44+
}
45+
return result;
46+
}
47+
48+
int addDigits(int num) {
49+
var digitList = digits(num);
50+
while (digitList.length > 1) {
51+
int sum = 0;
52+
for (int d in digitList) {
53+
sum += d;
54+
}
55+
digitList = digits(sum);
56+
}
57+
return digitList[0];
58+
}
59+
}
60+
```
61+
62+
## Solution - 4
63+
64+
```dart
65+
class Solution {
66+
int addDigits(int num) {
67+
int sum = 0;
68+
if (num == 0) {
69+
return 0;
70+
}
71+
72+
while (num > 0) {
73+
if ((sum + num % 10) > 9) {
74+
sum = 1 + (sum + num % 10) % 10;
75+
} else
76+
sum += num % 10;
77+
78+
num = num ~/ 10;
79+
}
80+
81+
return sum;
82+
}
83+
}
84+
```
85+
86+
## Solution - 5 Recursion
87+
88+
```dart
89+
class Solution {
90+
int addDigits(int num) {
91+
String s = num.toString();
92+
int sum = 0;
93+
for (int i = 0; i < s.length; i++) {
94+
sum += s[i].codeUnitAt(0) - '0'.codeUnitAt(0);
95+
}
96+
if (sum > 9) return addDigits(sum);
97+
return sum;
98+
}
99+
}
100+
```

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ This repo contain leetcode solution using DART and GO programming language. Most
9797
- [Meeting Rooms](MeetingRooms/meeting_rooms.dart)
9898
- [Delete the Middle Node of a Linked List](DeleteTheMiddleNodeOfALinkedList/delete_the_middle_node_of_a_linked_list.dart)
9999
- [String Compression II](StringCompression-II/string_compression_II.dart)
100+
- [Add Digits](AddDigits/add_digits.dart)
100101

101102
## Reach me via
102103

0 commit comments

Comments
 (0)