换一种算法，从网上查到的