package main
import (
"fmt"
)
var LRUCache map[[2]int]bool = make(map[[2]int]bool)
func isPali (s string, left, right int) bool {
key := [2]int{left, right} // get LRU CACHE
value, has := LRUCache[key]
if has {
return value
}
if right > left {
LRUCache[key] = false
return false
}
for ;left < right; left++ {
if s[left] != s[right] {
LRUCache[key] = false
return false
}
right --
}
LRUCache[key] = true
return true
}
func DFS(s string, start int, element []string, res *[][]string) {
if start >= len(s) {
// 指针越界 结束递归
t := make([]string, len(element)) // 新建一个和 temp 等长的切片
copy(t, element) // temp 还要在递归中继续被修改,不能将它的引用推入 res
*res = append(*res, t) // 将 temp 的拷贝 加入解集 res
return
}
for i:=start ; i < len(s) ; i++ {
if isPali(s,start,i) { // 如果满足了条件 那就切掉子树
element = append(element, s[start:i+1]) // 切割 开始递归
DFS(s, i+1, element, res) // 从 i 开始接着往深处探索
element = element[:len(element)-1] // 递归结束 撤销改动,下一轮迭代
}
}
}
func partition(s string) [][]string {
var res [][]string
DFS(s, 0, make([]string, 0), &res)
return res
}
func main() {
s := partition("ab")
fmt.Println(s)
fmt.Println(LRUCache)
}
我在本地运行是获得的结果是
1:[[a b]]
2:map[[0 0]:true [0 1]:false [1 1]:true]
但是在 leetcode 提交确得到了不一样的结果
1:[["a","b"],["ab"]]
2:map[[0 0]:true [0 1]:true [0 2]:false [1 1]:true [1 2]:false [2 2]:true]
可以确认的是 LRUCache 的问题,golang 小白是不是对 golang 全局变量这一块的写法有误解呢
谢谢大家
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.