為了讓自己熟悉golang 語法
打算找從leetcode中 找出30 level為 easy的題目 來做練習解題
1 解讀問題的能力
2 表達解法的能力
預計在每篇文章 寫出以下結構
1 題目的解讀
2 初步解法的邏輯
3 遇到的困難
4 測資的撰寫
5 參考的素材
以下進入第一天要解的題目
Given an array nums. We define a running sum of an array as runningSum[i] = sum(nums[0]…nums[i]).
Return the running sum of nums.
給予一個元素型別是正整數的陣列 nums
回傳一個元素型別是正整數的陣列 runningSum
每個元素符合以下特性:
位於index i 的元素runningSum[i]的值
是前i個元素的和
先觀察結果array
其中
array[i] = array[i-1] + nums[i]
所以可以利用
在loop nums的時候
順便計算出每個array element
let accum as integer with value 0
let returnSums as integer array with size of nums
loop nums with index i:
accum += nums[i]
returnSums[i] = accum
return returnSums
package running_sum
func runningSum(nums []int) []int {
ret := make([]int, len(nums))
accum := 0
for idx, val := range nums {
accum += val
ret[idx] = accum
}
return ret
}
一開始不習慣把pseudo code寫下來
因此 不太容易把自己的code做解析
對於table driven test還不太熟析
所以對於寫test還是耗費不少時間
golang本身有一個很好的測試package testing
加上reflect還好有vscode的快捷鍵
在寫好程式碼之後右鍵建立Unit test for function就會自動產生 template
如下:
package running_sum
import (
"reflect"
"testing"
)
func Test_runningSum(t *testing.T) {
type args struct {
nums []int
}
tests := []struct {
name string
args args
want []int
}{
{
name: "Example1",
args: args{
nums: []int{1, 2, 3, 4},
},
want: []int{1, 3, 6, 10},
},
{
name: "Example2",
args: args{
nums: []int{1, 1, 1, 1, 1},
},
want: []int{1, 2, 3, 4, 5},
},
{
name: "Example3",
args: args{
nums: []int{3, 1, 2, 10, 1},
},
want: []int{3, 4, 6, 16, 17},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := runningSum(tt.args.nums); !reflect.DeepEqual(got, tt.want) {
t.Errorf("runningSum() = %v, want %v", got, tt.want)
}
})
}
}