題目
你有一個只支援單個標籤頁的 瀏覽器 ,最開始你瀏覽的網頁是 homepage ,
你可以訪問其他的網站 url ,也可以在瀏覽歷史中後退 steps 步或前進 steps 步。
請你實現 BrowserHistory 類:
BrowserHistory(string homepage) ,用 homepage 初始化瀏覽器類。
void visit(string url) 從當前頁跳轉訪問 url 對應的頁面 。
string back(int steps) 在瀏覽歷史中後退 steps 步。
如果你只能在瀏覽歷史中後退至多 x 步且 steps > x ,那麼你只後退 x 步。
請返回後退 至多 steps 步以後的 url 。
string forward(int steps) 在瀏覽歷史中前進 steps 步。
如果你只能在瀏覽歷史中前進至多 x 步且 steps > x ,那麼你只前進 x 步。
請返回前進 至多 steps步以後的 url 。
示例:輸入:["BrowserHistory","visit","visit","visit","back","back","forward",
"visit","forward","back","back"]
[["leetcode.com"],["google.com"],["facebook.com"],
["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]]
輸出:[null,null,null,null,"facebook.com","google.com","facebook.com",null,
"linkedin.com","google.com","leetcode.com"]
解釋:
BrowserHistory browserHistory = new BrowserHistory("leetcode.com");
browserHistory.visit("google.com"); // 你原本在瀏覽 "leetcode.com" 。訪問 "google.com"
browserHistory.visit("facebook.com"); // 你原本在瀏覽 "google.com" 。訪問 "facebook.com"
browserHistory.visit("youtube.com");
// 你原本在瀏覽 "facebook.com" 。訪問 "youtube.com"
browserHistory.back(1);
// 你原本在瀏覽 "youtube.com" ,後退到 "facebook.com" 並返回 "facebook.com"
browserHistory.back(1);
// 你原本在瀏覽 "facebook.com" ,後退到 "google.com" 並返回 "google.com"
browserHistory.forward(1);
// 你原本在瀏覽 "google.com" ,前進到 "facebook.com" 並返回 "facebook.com"
browserHistory.visit("linkedin.com");
// 你原本在瀏覽 "facebook.com" 。 訪問 "linkedin.com"
browserHistory.forward(2);
// 你原本在瀏覽 "linkedin.com" ,你無法前進任何步數。
browserHistory.back(2);
// 你原本在瀏覽 "linkedin.com" ,後退兩步依次先到 "facebook.com" ,然後到 "google.com" ,並返回 "google.com"
browserHistory.back(7);
// 你原本在瀏覽 "google.com", 你只能後退一步到 "leetcode.com" ,並返回 "leetcode.com"
提示:1 <= homepage.length <= 20
1 <= url.length <= 20
1 <= steps <= 100
homepage 和 url 都只包含 '.' 或者小寫英文字母。
最多呼叫 5000 次 visit, back 和 forward 函式。
解題思路分析1、陣列;時間複雜度O(1),空間複雜度O(n)
type BrowserHistory struct { arr []string index int}func Constructor(homepage string) BrowserHistory { return BrowserHistory{ arr: []string{homepage}, index: 0, }}func (this *BrowserHistory) Visit(url string) { length := len(this.arr) if this.index == length-1 { this.arr = append(this.arr, url) } else if this.index < length-1 { this.arr = this.arr[:this.index+1] this.arr = append(this.arr, url) } this.index++}func (this *BrowserHistory) Back(steps int) string { if steps > this.index { this.index = 0 return this.arr[0] } this.index = this.index - steps return this.arr[this.index]}func (this *BrowserHistory) Forward(steps int) string { length := len(this.arr) if this.index == length-1 { } else if this.index+steps > length-1 { this.index = length - 1 } else { this.index = this.index + steps } return this.arr[this.index]}
總結Medium題目,簡單的設計題目,使用陣列即可