leetcodeブラシ問題の2数加算(go実現)
タイトルはLeetCode(https://leetcode-cn.com).
1.2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
注意:この問題はチェーンテーブルの理解に役立ち、チェーンテーブルの操作の復習に役立ちます.
解法一:暴力法(12 ms、メモリ5.7 M、後期最適化できるかどうかを見る)
まず2つのチェーンテーブルの値を取り出し,それぞれsliceに存在する.2つのsliceの長さを比較し,置換(長さの長い値をa,端の値bに与える)を行った.ループを加算し、結果をaに格納する(ここでは、前回のループが10以上であるか否かを示すためのスケールjが設けられている).最後にループaを行い、結果をチェーンテーブルに1つずつ入れる(ここではチェーンテーブルの尾まで取る必要がある).
コードは次のとおりです.
1.2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
注意:この問題はチェーンテーブルの理解に役立ち、チェーンテーブルの操作の復習に役立ちます.
解法一:暴力法(12 ms、メモリ5.7 M、後期最適化できるかどうかを見る)
まず2つのチェーンテーブルの値を取り出し,それぞれsliceに存在する.2つのsliceの長さを比較し,置換(長さの長い値をa,端の値bに与える)を行った.ループを加算し、結果をaに格納する(ここでは、前回のループが10以上であるか否かを示すためのスケールjが設けられている).最後にループaを行い、結果をチェーンテーブルに1つずつ入れる(ここではチェーンテーブルの尾まで取る必要がある).
コードは次のとおりです.
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var a []int
for {
if l1 != nil{
a = append(a,l1.Val)
l1 = l1.Next
}else{
break
}
}
var b []int
for {
if l2 != nil{
b = append(b,l2.Val)
l2 = l2.Next
}else{
break
}
}
alen := len(a)
blen := len(b)
j := 0
// , , ,
if alen < blen {
a,b = b,a
alen = len(a)
blen = len(b)
}
for i:=0;i= 10 {
a[i] = num - 10
j = 1
}else{
a[i] = num
j = 0
}
}
for m:=blen;m= 10 {
a[m] = num -10
j = 1
}else{
a[m] = num
j = 0
}
}
// j, 0 10
if j > 0{
a = append(a,1)
}
var l3 = &ListNode{Val:-1}
l5 := l3 // , , l3 l5 , l5
for _,v := range a{
if l3.Val == -1{
l3.Val = v
continue
}
var l4 = new(ListNode)
l4.Val = v
l4.Next = nil
l3.Next = l4
l3 = l3.Next // l3
}
return l5
}