目錄
341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator??????
343. 整數(shù)拆分 Integer Break??????
?? 每日一練刷題專欄???
Rust每日一練 專欄
Golang每日一練 專欄
Python每日一練 專欄
C/C++每日一練 專欄
Java每日一練 專欄
341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator
給你一個(gè)嵌套的整數(shù)列表?nestedList
?。每個(gè)元素要么是一個(gè)整數(shù),要么是一個(gè)列表;該列表的元素也可能是整數(shù)或者是其他列表。請(qǐng)你實(shí)現(xiàn)一個(gè)迭代器將其扁平化,使之能夠遍歷這個(gè)列表中的所有整數(shù)。
實(shí)現(xiàn)扁平迭代器類?NestedIterator
?:
-
NestedIterator(List<NestedInteger> nestedList)
?用嵌套列表?nestedList
?初始化迭代器。 -
int next()
?返回嵌套列表的下一個(gè)整數(shù)。 -
boolean hasNext()
?如果仍然存在待迭代的整數(shù),返回?true
?;否則,返回?false
?。
你的代碼將會(huì)用下述偽代碼檢測(cè):
initialize iterator with nestedList res = [] while iterator.hasNext() append iterator.next() to the end of res return res
如果?res
?與預(yù)期的扁平化列表匹配,那么你的代碼將會(huì)被判為正確。
示例 1:
輸入:nestedList = [[1,1],2,[1,1]] 輸出:[1,1,2,1,1] 解釋:通過重復(fù)調(diào)用?next 直到?hasNext 返回 false,next?返回的元素的順序應(yīng)該是: [1,1,2,1,1]。
示例 2:
輸入:nestedList = [1,[4,[6]]] 輸出:[1,4,6] 解釋:通過重復(fù)調(diào)用?next?直到?hasNext 返回 false,next?返回的元素的順序應(yīng)該是: [1,4,6]。
提示:
1 <= nestedList.length <= 500
- 嵌套列表中的整數(shù)值在范圍?
[-10^6, 10^6]
?內(nèi)
代碼:
package main
import "fmt"
type NestedInteger struct {
IsInteger bool
Value int
List []*NestedInteger
}
type NestedIterator struct {
FlattenedList []int // 扁平化后的列表
Index int // 當(dāng)前迭代位置的索引
}
func Constructor(nestedList []*NestedInteger) *NestedIterator {
flattenedList := make([]int, 0)
dfs(nestedList, &flattenedList)
return &NestedIterator{FlattenedList: flattenedList, Index: -1}
}
// 使用深度優(yōu)先搜索將嵌套列表扁平化
func dfs(nestedList []*NestedInteger, flattenedList *[]int) {
for _, ni := range nestedList {
if ni.IsInteger {
*flattenedList = append(*flattenedList, ni.Value)
} else {
dfs(ni.List, flattenedList)
}
}
}
func (it *NestedIterator) HasNext() bool {
return it.Index+1 < len(it.FlattenedList)
}
func (it *NestedIterator) Next() int {
it.Index++
return it.FlattenedList[it.Index]
}
func main() {
nestedList := []*NestedInteger{
&NestedInteger{IsInteger: false, List: []*NestedInteger{
&NestedInteger{IsInteger: true, Value: 1},
&NestedInteger{IsInteger: true, Value: 1},
}},
&NestedInteger{IsInteger: true, Value: 2},
&NestedInteger{IsInteger: false, List: []*NestedInteger{
&NestedInteger{IsInteger: true, Value: 1},
&NestedInteger{IsInteger: true, Value: 1},
}},
}
iterator := Constructor(nestedList)
result := make([]int, 0)
for iterator.HasNext() {
result = append(result, iterator.Next())
}
fmt.Println(result)
nestedList = []*NestedInteger{
&NestedInteger{true, 1, nil},
&NestedInteger{false, 0, []*NestedInteger{
&NestedInteger{true, 4, nil},
&NestedInteger{false, 0, []*NestedInteger{
&NestedInteger{true, 6, nil},
}},
}},
}
iterator = Constructor(nestedList)
result = make([]int, 0)
for iterator.HasNext() {
result = append(result, iterator.Next())
}
fmt.Println(result)
}
輸出:
[1 1 2 1 1]
[1 4 6]
343. 整數(shù)拆分 Integer Break
給定一個(gè)正整數(shù)?n
?,將其拆分為?k
?個(gè)?正整數(shù)?的和(?k >= 2
?),并使這些整數(shù)的乘積最大化。
返回?你可以獲得的最大乘積?。
示例 1:
輸入: n = 2 輸出: 1 解釋: 2 = 1 + 1, 1 × 1 = 1。
示例?2:
輸入: n = 10 輸出: 36 解釋: 10 = 3 + 3 + 4, 3 ×?3 ×?4 = 36。
提示:
2 <= n <= 58
代碼:
package main
import "fmt"
func integerBreak(n int) int {
if n <= 3 {
return n - 1
}
dp := make([]int, n+1)
dp[2] = 1
for i := 3; i <= n; i++ {
for j := 1; j < i-1; j++ {
dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j]))
}
}
return dp[n]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
fmt.Println(integerBreak(2))
fmt.Println(integerBreak(10))
}
輸出:
1
36
?? 每日一練刷題專欄???
? 持續(xù),努力奮斗做強(qiáng)刷題搬運(yùn)工!
?? 點(diǎn)贊,你的認(rèn)可是我堅(jiān)持的動(dòng)力!?
???收藏,你的青睞是我努力的方向!?
? 評(píng)論,你的意見是我進(jìn)步的財(cái)富!??
??主頁(yè):https://hannyang.blog.csdn.net/?
|
Rust每日一練 專欄(2023.5.16~)更新中... |
|
Golang每日一練 專欄(2023.3.11~)更新中... |
|
Python每日一練 專欄(2023.2.18~2023.5.18)暫停更 |
|
C/C++每日一練 專欄(2023.2.18~2023.5.18)暫停更 |
|
Java每日一練 專欄(2023.3.11~2023.5.18)暫停更文章來源地址http://www.zghlxwxcb.cn/news/detail-562859.html |
到了這里,關(guān)于Golang每日一練(leetDay0118) 扁平化嵌套列表迭代器、整數(shù)拆分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!