日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数

發布時間:2025/3/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

累加數是一個字符串,組成它的數字可以形成累加序列。

一個有效的累加序列必須至少包含 3 個數。除了最開始的兩個數以外,字符串中的其他數都等于它之前兩個數相加的和。

給定一個只包含數字 '0'-'9' 的字符串,編寫一個算法來判斷給定輸入是否是累加數。

說明: 累加序列里的數不會以 0 開頭,所以不會出現 1, 2, 03 或者 1, 02, 3 的情況。

示例 1:輸入: "112358" 輸出: true

解釋: 累加序列為: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8

示例 2:輸入: "199100199" 輸出: true

解釋: 累加序列為: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199

進階:你如何處理一個溢出的過大的整數輸入?

解題思路分析

1、回溯;時間復雜度O(n(log(n))^2),空間復雜度O(n)

var res []intfunc isAdditiveNumber(num string) bool {if len(num) < 3 {return false}res = make([]int, 0)dfs(num, 0, 0, 0, make([]int, 0))return len(res) >= 3}func dfs(s string, index, sum, prev int, path []int) bool {if index == len(s) {if len(path) >= 3 {res = path}return len(path) >= 3}value := 0for i := index; i < len(s); i++ {// 0開頭不滿足要求(當前i=index的時候,可以為0, 避免錯過1+0=1的情況)if s[index] == '0' && i > index {break}value = value*10 + int(s[i]-'0')if len(path) >= 2 {if value < sum {continue}if value > sum {break}}if dfs(s, i+1, prev+value, value, append(path, value)) == true {return true}}return false}

總結

Medium題目,回溯問題,題目類似leetcode 842.將數組拆分成斐波那契序列

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。