The previous post dealt with synching iPhone's calendar with Google calendar, but following that process you don't get public holidays showing.
Here's how to do that.
First do Stage 1 on your iPhone:
Settings> Mail, contacts, calendars > Add account > Other > only this time, select Add subscribed calendar.
Then, the server is whatever public holiday calendar you wish. I used Apple's purely because it's easy to find the server address:
For US public holidays, it's
Or if you're using Google calendars anyway, here's Google's: