Skip to content

Commit bd22643

Browse files
authored
Merge pull request halfrost#38 from halfrost/add_hugo
Add hugo
2 parents e5bd520 + d876599 commit bd22643

File tree

84 files changed

+4675
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+4675
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package leetcode
2+
3+
import "strconv"
4+
5+
func isPalindrome(x int) bool {
6+
if x < 0 {
7+
return false
8+
}
9+
if x < 10 {
10+
return true
11+
}
12+
s := strconv.Itoa(x)
13+
length := len(s)
14+
for i := 0; i <= length/2; i++ {
15+
if s[i] != s[length-1-i] {
16+
return false
17+
}
18+
}
19+
return true
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question9 struct {
9+
para9
10+
ans9
11+
}
12+
13+
// para 是参数
14+
// one 代表第一个参数
15+
type para9 struct {
16+
one int
17+
}
18+
19+
// ans 是答案
20+
// one 代表第一个答案
21+
type ans9 struct {
22+
one bool
23+
}
24+
25+
func Test_Problem9(t *testing.T) {
26+
27+
qs := []question9{
28+
29+
question9{
30+
para9{121},
31+
ans9{true},
32+
},
33+
34+
question9{
35+
para9{-121},
36+
ans9{false},
37+
},
38+
39+
question9{
40+
para9{10},
41+
ans9{false},
42+
},
43+
44+
question9{
45+
para9{321},
46+
ans9{false},
47+
},
48+
49+
question9{
50+
para9{-123},
51+
ans9{false},
52+
},
53+
54+
question9{
55+
para9{120},
56+
ans9{false},
57+
},
58+
59+
question9{
60+
para9{1534236469},
61+
ans9{false},
62+
},
63+
}
64+
65+
fmt.Printf("------------------------Leetcode Problem 9------------------------\n")
66+
67+
for _, q := range qs {
68+
_, p := q.ans9, q.para9
69+
fmt.Printf("【input】:%v 【output】:%v\n", p.one, isPalindrome(p.one))
70+
}
71+
fmt.Printf("\n\n\n")
72+
}
+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# [9. Palindrome Number](https://leetcode.com/problems/palindrome-number/)
2+
3+
4+
## 题目
5+
6+
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
7+
8+
**Example 1**:
9+
10+
```
11+
Input: 121
12+
Output: true
13+
```
14+
15+
**Example 2**:
16+
17+
```
18+
Input: -121
19+
Output: false
20+
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
21+
```
22+
23+
**Example 3**:
24+
25+
```
26+
Input: 10
27+
Output: false
28+
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
29+
```
30+
31+
**Follow up**:
32+
33+
Coud you solve it without converting the integer to a string?
34+
35+
## 题目大意
36+
37+
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
38+
39+
## 解题思路
40+
41+
- 判断一个整数是不是回文数。
42+
- 简单题。注意会有负数的情况,负数,个位数,10 都不是回文数。其他的整数再按照回文的规则判断。
43+
44+
## 代码
45+
46+
```go
47+
48+
package leetcode
49+
50+
import "strconv"
51+
52+
func isPalindrome(x int) bool {
53+
if x < 0 {
54+
return false
55+
}
56+
if x < 10 {
57+
return true
58+
}
59+
s := strconv.Itoa(x)
60+
length := len(s)
61+
for i := 0; i <= length/2; i++ {
62+
if s[i] != s[length-1-i] {
63+
return false
64+
}
65+
}
66+
return true
67+
}
68+
69+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package leetcode
2+
3+
var roman = map[string]int{
4+
"I": 1,
5+
"V": 5,
6+
"X": 10,
7+
"L": 50,
8+
"C": 100,
9+
"D": 500,
10+
"M": 1000,
11+
}
12+
13+
func romanToInt(s string) int {
14+
if s == "" {
15+
return 0
16+
}
17+
num, lastint, total := 0, 0, 0
18+
for i := 0; i < len(s); i++ {
19+
char := s[len(s)-(i+1) : len(s)-i]
20+
num = roman[char]
21+
if num < lastint {
22+
total = total - num
23+
} else {
24+
total = total + num
25+
}
26+
lastint = num
27+
}
28+
return total
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question13 struct {
9+
para13
10+
ans13
11+
}
12+
13+
// para 是参数
14+
// one 代表第一个参数
15+
type para13 struct {
16+
one string
17+
}
18+
19+
// ans 是答案
20+
// one 代表第一个答案
21+
type ans13 struct {
22+
one int
23+
}
24+
25+
func Test_Problem13(t *testing.T) {
26+
27+
qs := []question13{
28+
29+
question13{
30+
para13{"III"},
31+
ans13{3},
32+
},
33+
34+
question13{
35+
para13{"IV"},
36+
ans13{4},
37+
},
38+
39+
question13{
40+
para13{"IX"},
41+
ans13{9},
42+
},
43+
44+
question13{
45+
para13{"LVIII"},
46+
ans13{58},
47+
},
48+
49+
question13{
50+
para13{"MCMXCIV"},
51+
ans13{1994},
52+
},
53+
54+
question13{
55+
para13{"MCMXICIVI"},
56+
ans13{2014},
57+
},
58+
}
59+
60+
fmt.Printf("------------------------Leetcode Problem 13------------------------\n")
61+
62+
for _, q := range qs {
63+
_, p := q.ans13, q.para13
64+
fmt.Printf("【input】:%v 【output】:%v\n", p.one, romanToInt(p.one))
65+
}
66+
fmt.Printf("\n\n\n")
67+
}
+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# [13. Roman to Integer](https://leetcode.com/problems/roman-to-integer/)
2+
3+
4+
## 题目
5+
6+
Roman numerals are represented by seven different symbols: `I``V``X``L``C``D` and `M`.
7+
8+
```
9+
Symbol Value
10+
I 1
11+
V 5
12+
X 10
13+
L 50
14+
C 100
15+
D 500
16+
M 1000
17+
```
18+
19+
For example, two is written as `II` in Roman numeral, just two one's added together. Twelve is written as, `XII`, which is simply `X` + `II`. The number twenty seven is written as `XXVII`, which is `XX` + `V` + `II`.
20+
21+
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not `IIII`. Instead, the number four is written as `IV`. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as `IX`. There are six instances where subtraction is used:
22+
23+
- `I` can be placed before `V` (5) and `X` (10) to make 4 and 9.
24+
- `X` can be placed before `L` (50) and `C` (100) to make 40 and 90.
25+
- `C` can be placed before `D` (500) and `M` (1000) to make 400 and 900.
26+
27+
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
28+
29+
**Example 1**:
30+
31+
```
32+
Input: "III"
33+
Output: 3
34+
```
35+
36+
**Example 2**:
37+
38+
```
39+
Input: "IV"
40+
Output: 4
41+
```
42+
43+
**Example 3**:
44+
45+
```
46+
Input: "IX"
47+
Output: 9
48+
```
49+
50+
**Example 4**:
51+
52+
```
53+
Input: "LVIII"
54+
Output: 58
55+
Explanation: L = 50, V= 5, III = 3.
56+
```
57+
58+
**Example 5**:
59+
60+
```
61+
Input: "MCMXCIV"
62+
Output: 1994
63+
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
64+
```
65+
66+
## 题目大意
67+
68+
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
69+
70+
```go
71+
72+
字符 数值
73+
I 1
74+
V 5
75+
X 10
76+
L 50
77+
C 100
78+
D 500
79+
M 1000
80+
81+
```
82+
83+
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
84+
85+
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
86+
87+
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
88+
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
89+
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
90+
91+
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
92+
93+
## 解题思路
94+
95+
- 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
96+
- 简单题。按照题目中罗马数字的字符数值,计算出对应罗马数字的十进制数即可。
97+
98+
## 代码
99+
100+
```go
101+
102+
package leetcode
103+
104+
var roman = map[string]int{
105+
"I": 1,
106+
"V": 5,
107+
"X": 10,
108+
"L": 50,
109+
"C": 100,
110+
"D": 500,
111+
"M": 1000,
112+
}
113+
114+
func romanToInt(s string) int {
115+
if s == "" {
116+
return 0
117+
}
118+
num, lastint, total := 0, 0, 0
119+
for i := 0; i < len(s); i++ {
120+
char := s[len(s)-(i+1) : len(s)-i]
121+
num = roman[char]
122+
if num < lastint {
123+
total = total - num
124+
} else {
125+
total = total + num
126+
}
127+
lastint = num
128+
}
129+
return total
130+
}
131+
132+
```

0 commit comments

Comments
 (0)