-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path1472-design-browser-history.js
59 lines (55 loc) · 1.75 KB
/
1472-design-browser-history.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* 1472. Design Browser History
* https://leetcode.com/problems/design-browser-history/
* Difficulty: Medium
*
* You have a browser of one tab where you start on the homepage and you
* can visit another url, get back in the history number of steps or move
* forward in the history number of steps.
*
* Implement the BrowserHistory class:
*
* - `BrowserHistory(string homepage)` Initializes the object with the
* homepage of the browser.
* - `void visit(string url)` Visits url from the current page. It clears
* up all the forward history.
* - `string back(int steps)` Move steps back in history. If you can only
* return x steps in the history and steps > x, you will return only x
* steps. Return the current url after moving back in history at most steps.
* - `string forward(int steps)` Move steps forward in history. If you can
* only forward x steps in the history and steps > x, you will forward only
* x steps. Return the current url after forwarding in history at most steps.
*/
/**
* @param {string} homepage
*/
var BrowserHistory = function(homepage) {
this.history = [];
this.cursor = -1;
this.visit(homepage);
};
/**
* @param {string} url
* @return {void}
*/
BrowserHistory.prototype.visit = function(url) {
this.history.splice(this.cursor + 1, this.history.length);
this.history.push(url);
this.cursor++;
};
/**
* @param {number} steps
* @return {string}
*/
BrowserHistory.prototype.back = function(steps) {
this.cursor = Math.max(0, this.cursor - steps);
return this.history[this.cursor];
};
/**
* @param {number} steps
* @return {string}
*/
BrowserHistory.prototype.forward = function(steps) {
this.cursor = Math.min(this.cursor + steps, this.history.length - 1);
return this.history[this.cursor];
};