Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 42a5bae

Browse files
committed
feat: add solutions to lc problem: No.0625
No.0625.Minimum Factorization
1 parent e030d3e commit 42a5bae

File tree

6 files changed

+227
-2
lines changed

6 files changed

+227
-2
lines changed

‎solution/0600-0699/0625.Minimum Factorization/README.md‎

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,105 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
**方法一:贪心 + 因式分解**
46+
47+
我们先判断 $num$ 是否小于 2ドル,ドル如果是,直接返回 $num$。然后从 9ドル$ 开始,尽可能多地将数字分解为 9ドル,ドル然后分解为 8ドル,ドル以此类推,直到分解为 2ドル$。如果最后剩下的数字不是 1ドル,ドル或者结果超过了 2ドル^{31} - 1,ドル则返回 0ドル$。否则,我们返回结果。
48+
49+
> 注意,分解后的数字,应该依次填充到结果的个位、十位、百位、千位......上,因此我们需要维护一个变量 $mul,ドル表示当前的位数。
50+
51+
时间复杂度 $O(\log n),ドル空间复杂度 $O(1)$。其中 $n$ 为 $num$ 的值。
52+
4553
<!-- tabs:start -->
4654

4755
### **Python3**
4856

4957
<!-- 这里可写当前语言的特殊实现逻辑 -->
5058

5159
```python
52-
60+
class Solution:
61+
def smallestFactorization(self, num: int) -> int:
62+
if num < 2:
63+
return num
64+
ans, mul = 0, 1
65+
for i in range(9, 1, -1):
66+
while num % i == 0:
67+
num //= i
68+
ans = mul * i + ans
69+
mul *= 10
70+
return ans if num < 2 and ans <= 2**31 - 1 else 0
5371
```
5472

5573
### **Java**
5674

5775
<!-- 这里可写当前语言的特殊实现逻辑 -->
5876

5977
```java
78+
class Solution {
79+
public int smallestFactorization(int num) {
80+
if (num < 2) {
81+
return num;
82+
}
83+
long ans = 0, mul = 1;
84+
for (int i = 9; i >= 2; --i) {
85+
if (num % i == 0) {
86+
while (num % i == 0) {
87+
num /= i;
88+
ans = mul * i + ans;
89+
mul *= 10;
90+
}
91+
}
92+
}
93+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
int smallestFactorization(int num) {
104+
if (num < 2) {
105+
return num;
106+
}
107+
long long ans = 0, mul = 1;
108+
for (int i = 9; i >= 2; --i) {
109+
if (num % i == 0) {
110+
while (num % i == 0) {
111+
num /= i;
112+
ans = mul * i + ans;
113+
mul *= 10;
114+
}
115+
}
116+
}
117+
return num < 2 && ans <= INT_MAX ? ans : 0;
118+
}
119+
};
120+
```
60121
122+
### **Go**
123+
124+
```go
125+
func smallestFactorization(num int) int {
126+
if num < 2 {
127+
return num
128+
}
129+
ans, mul := 0, 1
130+
for i := 9; i >= 2; i-- {
131+
if num%i == 0 {
132+
for num%i == 0 {
133+
num /= i
134+
ans = mul*i + ans
135+
mul *= 10
136+
}
137+
}
138+
}
139+
if num < 2 && ans <= math.MaxInt32 {
140+
return ans
141+
}
142+
return 0
143+
}
61144
```
62145

63146
### **...**

‎solution/0600-0699/0625.Minimum Factorization/README_EN.md‎

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,88 @@
2828
### **Python3**
2929

3030
```python
31-
31+
class Solution:
32+
def smallestFactorization(self, num: int) -> int:
33+
if num < 2:
34+
return num
35+
ans, mul = 0, 1
36+
for i in range(9, 1, -1):
37+
while num % i == 0:
38+
num //= i
39+
ans = mul * i + ans
40+
mul *= 10
41+
return ans if num < 2 and ans <= 2**31 - 1 else 0
3242
```
3343

3444
### **Java**
3545

3646
```java
47+
class Solution {
48+
public int smallestFactorization(int num) {
49+
if (num < 2) {
50+
return num;
51+
}
52+
long ans = 0, mul = 1;
53+
for (int i = 9; i >= 2; --i) {
54+
if (num % i == 0) {
55+
while (num % i == 0) {
56+
num /= i;
57+
ans = mul * i + ans;
58+
mul *= 10;
59+
}
60+
}
61+
}
62+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
63+
}
64+
}
65+
```
66+
67+
### **C++**
68+
69+
```cpp
70+
class Solution {
71+
public:
72+
int smallestFactorization(int num) {
73+
if (num < 2) {
74+
return num;
75+
}
76+
long long ans = 0, mul = 1;
77+
for (int i = 9; i >= 2; --i) {
78+
if (num % i == 0) {
79+
while (num % i == 0) {
80+
num /= i;
81+
ans = mul * i + ans;
82+
mul *= 10;
83+
}
84+
}
85+
}
86+
return num < 2 && ans <= INT_MAX ? ans : 0;
87+
}
88+
};
89+
```
3790
91+
### **Go**
92+
93+
```go
94+
func smallestFactorization(num int) int {
95+
if num < 2 {
96+
return num
97+
}
98+
ans, mul := 0, 1
99+
for i := 9; i >= 2; i-- {
100+
if num%i == 0 {
101+
for num%i == 0 {
102+
num /= i
103+
ans = mul*i + ans
104+
mul *= 10
105+
}
106+
}
107+
}
108+
if num < 2 && ans <= math.MaxInt32 {
109+
return ans
110+
}
111+
return 0
112+
}
38113
```
39114

40115
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int smallestFactorization(int num) {
4+
if (num < 2) {
5+
return num;
6+
}
7+
long long ans = 0, mul = 1;
8+
for (int i = 9; i >= 2; --i) {
9+
if (num % i == 0) {
10+
while (num % i == 0) {
11+
num /= i;
12+
ans = mul * i + ans;
13+
mul *= 10;
14+
}
15+
}
16+
}
17+
return num < 2 && ans <= INT_MAX ? ans : 0;
18+
}
19+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func smallestFactorization(num int) int {
2+
if num < 2 {
3+
return num
4+
}
5+
ans, mul := 0, 1
6+
for i := 9; i >= 2; i-- {
7+
if num%i == 0 {
8+
for num%i == 0 {
9+
num /= i
10+
ans = mul*i + ans
11+
mul *= 10
12+
}
13+
}
14+
}
15+
if num < 2 && ans <= math.MaxInt32 {
16+
return ans
17+
}
18+
return 0
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int smallestFactorization(int num) {
3+
if (num < 2) {
4+
return num;
5+
}
6+
long ans = 0, mul = 1;
7+
for (int i = 9; i >= 2; --i) {
8+
if (num % i == 0) {
9+
while (num % i == 0) {
10+
num /= i;
11+
ans = mul * i + ans;
12+
mul *= 10;
13+
}
14+
}
15+
}
16+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def smallestFactorization(self, num: int) -> int:
3+
if num < 2:
4+
return num
5+
ans, mul = 0, 1
6+
for i in range(9, 1, -1):
7+
while num % i == 0:
8+
num //= i
9+
ans = mul * i + ans
10+
mul *= 10
11+
return ans if num < 2 and ans <= 2**31 - 1 else 0

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /