https://h30306.github.io/blog/zh-tw/leetcode/leetcode-2999/