代码全部由本人实现,不同于官方答案,内有丰富的注释和说明,