A patient Williamson reached stumps at Sabina Park in Kingston, Jamaica on 105 not out from 263 balls.
The 23-year-old came to the crease early when opener Peter Fulton was dismissed for one, edging a catch to wicketkeeper Denesh Ramdin off paceman Jerome Taylor.
Williams shared a 165-run partnership with Tom Latham for the second wicket. Playing in just his second test, Latham scored a career-best 83 off 206 deliveries.
He struck 10 boundaries and looked poised to reach his first test hundred when he got a leading edge and handed a simple return catch to spinner Shane Shillingford.
Ross Taylor, also batting cautiously, finished the day unbeaten on 34 after hitting three fours in one over from Taylor as Williamson put the brakes on nearing his sixth test century.
Williamson moved into the 90s with a boundary but did not score off any of his next 33 balls. He eventually reached his hundred after hitting Sulieman Benn for successive fours.