Skip to content

Commit 6a60680

Browse files
author
arbent
committed
2018/11/12
1 parent dc0bf2d commit 6a60680

File tree

7 files changed

+328
-0
lines changed

7 files changed

+328
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/* 两数相加
2+
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
3+
4+
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
5+
6+
示例:
7+
8+
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
9+
输出:7 -> 0 -> 8
10+
原因:342 + 465 = 807 */
11+
12+
/**
13+
* Definition for singly-linked list.
14+
* type ListNode struct {
15+
* Val int
16+
* Next *ListNode
17+
* }
18+
*/
19+
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
20+
var result *ListNode = new(ListNode)
21+
xl := result
22+
var carry int = 0
23+
for l1 != nil && l2 != nil {
24+
xl.Next = new(ListNode)
25+
xl = xl.Next
26+
xl.Val = (l1.Val + l2.Val + carry) % 10
27+
carry = (l1.Val + l2.Val + carry) / 10
28+
l1 = l1.Next
29+
l2 = l2.Next
30+
}
31+
for l1 != nil {
32+
xl.Next = new(ListNode)
33+
xl = xl.Next
34+
xl.Val = (l1.Val + carry) % 10
35+
carry = (l1.Val + carry) / 10
36+
l1 = l1.Next
37+
}
38+
for l2 != nil {
39+
xl.Next = new(ListNode)
40+
xl = xl.Next
41+
xl.Val = (l2.Val + carry) % 10
42+
carry = (l2.Val + carry) / 10
43+
l2 = l2.Next
44+
}
45+
if carry != 0 {
46+
xl.Next = new(ListNode)
47+
xl = xl.Next
48+
xl.Val = carry
49+
carry = 0
50+
}
51+
result = result.Next
52+
return result
53+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/* 无重复字符的最长子串
2+
给定一个字符串,找出不含有重复字符的最长子串的长度。
3+
4+
示例 1:
5+
6+
输入: "abcabcbb"
7+
输出: 3
8+
解释: 无重复字符的最长子串是 "abc",其长度为 3。
9+
示例 2:
10+
11+
输入: "bbbbb"
12+
输出: 1
13+
解释: 无重复字符的最长子串是 "b",其长度为 1。
14+
示例 3:
15+
16+
输入: "pwwkew"
17+
输出: 3
18+
解释: 无重复字符的最长子串是 "wke",其长度为 3。
19+
请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。 */
20+
21+
func lengthOfLongestSubstring(s string) int {
22+
length := len(s)
23+
i := 0
24+
max := 0
25+
for j := i; j < length; j++ {
26+
for n := i; n < j; n++ {
27+
if s[n] == s[j] {
28+
if max < n-i+1 {
29+
max = n - i + 1
30+
}
31+
i = n + 1
32+
break
33+
} else {
34+
if max < n+1-i+1 {
35+
max = n - i + 2
36+
}
37+
}
38+
}
39+
}
40+
if length == 1 {
41+
max = 1
42+
}
43+
return max
44+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/* 最长回文子串
2+
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
3+
4+
示例 1:
5+
6+
输入: "babad"
7+
输出: "bab"
8+
注意: "aba"也是一个有效答案。
9+
示例 2:
10+
11+
输入: "cbbd"
12+
输出: "bb" */
13+
14+
func longestPalindrome(s string) string {
15+
start := 0
16+
end := 0
17+
count := 0
18+
length := len(s)
19+
if length > 0 {
20+
end = 1
21+
count = 1
22+
}
23+
for i := 0; i < length; i++ {
24+
25+
if i < length-1 && s[i] == s[i+1] {
26+
m := i
27+
n := i + 1
28+
for m > 0 && n < length-1 && s[m-1] == s[n+1] {
29+
m--
30+
n++
31+
}
32+
if count < n-m+1 {
33+
count = n - m + 1
34+
start = m
35+
end = n + 1
36+
}
37+
}
38+
if i > 0 && i < length-1 && s[i-1] == s[i+1] {
39+
m := i
40+
n := i
41+
for m > 0 && n < length-1 && s[m-1] == s[n+1] {
42+
m--
43+
n++
44+
}
45+
if count < n-m+1 {
46+
count = n - m + 1
47+
start = m
48+
end = n + 1
49+
}
50+
51+
}
52+
}
53+
result := s[start:end]
54+
return result
55+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* 二叉树的最小深度
2+
给定一个二叉树,找出其最小深度。
3+
4+
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
5+
6+
说明: 叶子节点是指没有子节点的节点。
7+
8+
示例:
9+
10+
给定二叉树 [3,9,20,null,null,15,7],
11+
12+
3
13+
/ \
14+
9 20
15+
/ \
16+
15 7
17+
返回它的最小深度 2. */
18+
19+
/**
20+
* Definition for a binary tree node.
21+
* type TreeNode struct {
22+
* Val int
23+
* Left *TreeNode
24+
* Right *TreeNode
25+
* }
26+
*/
27+
func minDepth(root *TreeNode) int {
28+
if root == nil {
29+
return 0
30+
}
31+
l := minDepth(root.Left)
32+
r := minDepth(root.Right)
33+
if l|r == 0 {
34+
return 1
35+
}
36+
if l == 0 || r == 0 {
37+
return l | r + 1
38+
}
39+
if l < r {
40+
return l + 1
41+
}
42+
return r + 1
43+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* 区域和检索 - 数组不可变
2+
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
3+
4+
示例:
5+
6+
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()
7+
8+
sumRange(0, 2) -> 1
9+
sumRange(2, 5) -> -1
10+
sumRange(0, 5) -> -3
11+
说明:
12+
13+
你可以假设数组不可变。
14+
会多次调用 sumRange 方法。 */
15+
16+
type NumArray struct {
17+
arr []int
18+
}
19+
20+
func Constructor(nums []int) NumArray {
21+
n := new(NumArray)
22+
n.arr = nums
23+
return *n
24+
}
25+
26+
func (this *NumArray) SumRange(i int, j int) int {
27+
sum := 0
28+
for ; i <= j; i++ {
29+
sum += this.arr[i]
30+
}
31+
return sum
32+
}
33+
34+
/**
35+
* Your NumArray object will be instantiated and called as such:
36+
* obj := Constructor(nums);
37+
* param_1 := obj.SumRange(i,j);
38+
*/
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/* 二维区域和检索 - 矩阵不可变
2+
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。
3+
4+
Range Sum Query 2D
5+
上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。
6+
7+
示例:
8+
9+
给定 matrix = [
10+
[3, 0, 1, 4, 2],
11+
[5, 6, 3, 2, 1],
12+
[1, 2, 0, 1, 5],
13+
[4, 1, 0, 1, 7],
14+
[1, 0, 3, 0, 5]
15+
]
16+
17+
sumRegion(2, 1, 4, 3) -> 8
18+
sumRegion(1, 1, 2, 2) -> 11
19+
sumRegion(1, 2, 2, 4) -> 12
20+
说明:
21+
22+
你可以假设矩阵不可变。
23+
会多次调用 sumRegion 方法。
24+
你可以假设 row1 ≤ row2 且 col1 ≤ col2。 */
25+
26+
type NumMatrix struct {
27+
mat [][]int
28+
}
29+
30+
func Constructor(matrix [][]int) NumMatrix {
31+
m := new(NumMatrix)
32+
m.mat = matrix
33+
return *m
34+
}
35+
36+
func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int {
37+
sum := 0
38+
for i := row1; i <= row2; i++ {
39+
for j := col1; j <= col2; j++ {
40+
sum += this.mat[i][j]
41+
}
42+
}
43+
return sum
44+
}
45+
46+
/**
47+
* Your NumMatrix object will be instantiated and called as such:
48+
* obj := Constructor(matrix);
49+
* param_1 := obj.SumRegion(row1,col1,row2,col2);
50+
*/
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/* 区域和检索 - 数组可修改
2+
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
3+
4+
update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。
5+
6+
示例:
7+
8+
Given nums = [1, 3, 5]
9+
10+
sumRange(0, 2) -> 9
11+
update(1, 2)
12+
sumRange(0, 2) -> 8
13+
说明:
14+
15+
数组仅可以在 update 函数下进行修改。
16+
你可以假设 update 函数与 sumRange 函数的调用次数是均匀分布的。 */
17+
18+
type NumArray struct {
19+
arr []int
20+
}
21+
22+
func Constructor(nums []int) NumArray {
23+
n := new(NumArray)
24+
n.arr = nums
25+
return *n
26+
}
27+
28+
func (this *NumArray) Update(i int, val int) {
29+
this.arr[i] = val
30+
}
31+
32+
func (this *NumArray) SumRange(i int, j int) int {
33+
sum := 0
34+
for ; i <= j; i++ {
35+
sum += this.arr[i]
36+
}
37+
return sum
38+
}
39+
40+
/**
41+
* Your NumArray object will be instantiated and called as such:
42+
* obj := Constructor(nums);
43+
* obj.Update(i,val);
44+
* param_2 := obj.SumRange(i,j);
45+
*/

0 commit comments

Comments
 (0)