给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
func twoSum(nums []int, target int) []int {
for i:=0; i<len(nums); i++{
for k, v := range nums {
if k == i {
continue
}
if v + nums[i] == target {
return []int{i, k}
}
}
}
return nil
}
第一题,用了两个for做了出来,一看答案。。好吧。用hashtable高速完成,显得自己十分low
重点第二题来了。。
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
l1NumString := fmt.Sprint(l1.Val)
for {
if l1 = l1.Next; l1 == nil {
break
}
l1NumString = fmt.Sprint(l1.Val) + l1NumString
}
l2NumString := fmt.Sprint(l2.Val)
for {
if l2 = l2.Next; l2 == nil {
break
}
l2NumString = fmt.Sprint(l2.Val) + l2NumString
}
l1NumUint64, _ := strconv.ParseUint(l1NumString, 10, 64)
l2NumUint64, _ := strconv.ParseUint(l2NumString, 10, 64)
finalNum := l1NumUint64 + l2NumUint64
fmt.Println(l1NumUint64)
fmt.Println(l1NumString)
var digits []uint64
if finalNum == 0 {
digits = append(digits, 0)
}
for finalNum > 0 {
digit := finalNum % 10
digits = append([]uint64{digit}, digits...)
finalNum /= 10
}
var aaa = []*ListNode{}
// digits = [1,2,3]
// aaa = [3,2,1]
fmt.Println(len(digits))
for i:= len(digits)-1; i>=0; i-- {
currentIndexNode := &ListNode{
Val: int(digits[i]),
Next: nil,
}
if i == len(digits)-1 {
aaa= append(aaa,currentIndexNode)
continue
}
if i==0 {
aaa[len(aaa)-1].Next = currentIndexNode
aaa= append(aaa,currentIndexNode)
fmt.Println(aaa)
return aaa[0]
}
aaa[len(aaa)-1].Next = currentIndexNode
aaa = append(aaa,currentIndexNode)
}
return aaa[0]
}
老实人乖乖的将数字相加,测试例子直到[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
golang自身的int已经不够用。。。完美躺枪。。后续做题还是要想好这些int坑。。做好后续准备。。明天再战。。keep up