The incident happened about 10 p.m. on West 140th Street and Broadway when the man allegedly stole money from diners waiting to pay their bill.
He took off and then customers and several officers reportedly gave chase.
A transit officer caught up with the man, a scuffle ensued, and the officer then shot the alleged robber in the leg, according to the Post.
The man was taken to St. Luke's Hospital, the fire department said. His condition was not immediately clear.
Charges were pending.