go语言学习 11/5/2019
闭包非递归斐波那契:
package main
import "fmt"
func main() {
var result = fibonacci()
for i := 0; i <= 10; i++ {
fmt.Printf("fibonacci(%d) is: %d\n", i, result(i))
}
}
func fibonacci() func(int) int {
a = 0
return func(delta int) int {
defer func() {
a,b = b, a+b
}()
return b
}
}
斐波那契闭包调试代码:
func fibonacci() func(int) int {
a,b := 0,1
return func(delta int) int {
defer func() {
a,b = b, a+b
}()
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%d", file, line)
return b
}
}

可以看到for循环中闭包调试的代码并不是同步的,中间的原理就不得而知了
计算运行时间
start := time.Now()
fibonacci()
end := time.Now()
delta := end.Sub(start)
fmt.Printf("longCalculation took this amount of time: %s\n", delta)
快速排序:
func quickSort(nums []int,left,right int) {
if left >= right{
return
}
index :=partition(nums,left,right)
quickSort(nums,left,index - 1)
quickSort(nums,index + 1,right)
}
func partition(nums []int,left,right int) int{
baseNum := nums[left]
for left < right{
for (nums[right] >= baseNum && right > left){
right--
}
nums[left] = nums[right]
for (nums[left] <=baseNum && right > left) {
left++
}
nums[right] = nums[left]
}
nums[right] = baseNum
return right
}
-给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
func twoSum(nums []int, target int) []int {
var mapNeed map[int]int
mapNeed = make(map[int]int)
for num0:=0;num0<=len(nums);num0++{
var num = target - nums[num0]
if v,ok :=mapNeed[num];ok{
return []int{v,num0}
}else{
mapNeed[nums[num0]]=num0
}
}
return []int{}
}
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
var c int
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
if l1==nil&&l2==nil&&c==0{
return nil
}
if l1!=nil{
c+=l1.Val
l1=l1.Next
}
if l2!=nil{
c+=l2.Val
l2=l2.Next
}
var cur ListNode
cur.Val= c%10
c=c/10
cur.Next=addTwoNumbers(l1,l2)
return &cur
}
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
func lengthOfLongestSubstring(s string) int {
var maxsize,base int
var dict = [256]int{}
for key:=0;key<len(s);key++{
var i = s[key]
if dict[i] >base{
base = dict[i]
}
dict[i] = key + 1
if maxsize<key-base+1{
maxsize = key-base+1
}
}
return maxsize
}
浙公网安备 33010602011771号