golang刷Leetcode系列 加1

2022-03-21 02:12:48 字數 1293 閱讀 9392

給定乙個非負整數組成的非空陣列,在該數的基礎上加一,返回乙個新的陣列。

最高位數字存放在陣列的首位, 陣列中每個元素只儲存乙個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]

輸出: [1,2,4]

解釋: 輸入陣列表示數字 123。

示例 2:s

輸入: [4,3,2,1]

輸出: [4,3,2,2]

解釋: 輸入陣列表示數字 4321。

這道題做了挺長時間, 主要是第一次的思路沒有考慮到陣列所表示的整數可能會溢位的情況. 傻傻的把陣列轉換成整數, 加1之後又轉換為陣列.

所以這道題主要在於兩點:

整數溢位的問題

如何處理每一位的進製的問題

我的思路是, 設定另乙個切片result儲存相加之後的整數. 關於切片的長度, 是這樣確定的, 如果原陣列digits每一位都是9的話,

也就是說整數最高位會產生進1, 那麼result的長度就是digits長度加1. 否則, result的長度就是digits的長度.

使用carry表示進製(0或者1). 第一步先計算digits和result的最高位, 得到乙個初始的carry.

然後使用迴圈計算digits和result的每一位, 每一位的進製都取決於上一位相加得到的值, 如果該值大於10, 進製=1, 否則進製=0

func plusone(digits int) int 

} if overflow == len1 else

result := make(int, len2)

digits[len1-1] += 1

result[len2-1] = digits[len1-1] % 10

if digits[len1-1] >= 10

for i, j := len1 - 2, len2 - 2; i >= 0 || j >= 0; else

result[j] = digits[i] % 10

} //當最高位需要進製時

if len1 < len2 && j == 0

i--;

j--;

} fmt.println(result)

return result

}func main()

plusone(digits)

}

golang中的棧(LeetCode刷題)

func main 123 12 leetcode 739實現 答案是有的!使用list 雙鏈表 的部分操作就可以達到stack操作的目的。stack list.new 初始化棧 ind stack.remove stack.front int 出棧 stack.pushfront i 入棧 fmt...

leetcode 演算法題golang

dic s j j 雜湊表記錄索引 length maxnum length,j i 更新結果 return length func maxnum m,n int int else 第一種解法 先排序再掃瞄。從排好序的陣列進行遍歷,記錄當前位置與其之前位置的數進行比較,若相等則輸出該數。時間複雜度 ...

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...