另一种实现，但貌似比第一种差