Michigan State squeezed out a tough win over Duke, 68-67, to advance to the Final Four on Sunday evening.
Kenny Goins' 3-pointer in the game's final minute was the difference, as Duke freshman RJ Barrett couldn't convert a pair of free throws that would have tied the game with under 6 seconds remaining.
Cassius Winston led the Spartans with 20 points and 10 assists, Xavier Tillman had 19 and 10 rebounds and Goins scored 10.
Michigan State will play Texas Tech, who knocked Michigan out of the tournament on Thursday, for a chance to play in the National Championship game.
Michigan State stops Duke on final possession, advances to Final Four
3:22 left. Here we go.
Michigan State gets a stop after the break. The Spartans are then forced to the end of their shot clock, resulting in a forced Kenny Goins 3 that misses the mark. RJ Barrett reclaims the lead for Duke with a 3-pointer.
Duke timeout: Duke 64, Michigan State 63 (2:26 2nd)
Aaron Henry fails to convert inside. Duke gets the rebound. Huge chance for the Blue Devils to cash in on some insurance points, and of course it goes to Zion Wlliamson. He cuts through the lane and hits a tough layup over Goins.
That's a 7-0 run for Duke.
Michigan State timeout: Duke 66, Michigan State 63 (1:33 2nd)
Cassius Winston draws three dfenders in the paint and then finds Xavier Tillman for an alley-oop. It's a 1-point game.
Barrett then misses a jumper, giving the Spartans possession.
Michigan State timeout: Duke 66, Michigan State 65 (0:43 2nd)
Goins drills a wide-open 3-pointer after the break, putting the Spartans up by 2. 3-second difference between the shot clock and game clock.
Barrett misses a 3 with about 13 seconds left. Matt McQuaid and Cam Reddish tumble to the floor for the loose ball, which eventually goes out of bounds. It's initially ruled Spartan ball, but will probably go to Duke after video review.
It does. 8.4 seconds remaining. Duke gets it on the baseline.
Barrett drives and is fouled. He'll shoot two free throws with 5.2 seconds left.
Barrett misses the first. The second drops. Winston is fouled immediately, but Duke has a foul to give. 4.7 left.
Winston breaks free on the in-bound pass, runs away from everybody, and bleeds the final seconds of clock. This one's over, folks.
FINAL: Michigan State 68, Duke 67
Michigan State-Duke trading lead in final minutes
Zion Williamson ties the game at 58 with a bucket inside. Moments later, he swats Kenny Goins at the 3-point line.
Media timeout: Michigan State 58, Duke 58 (5:45 2nd)
Javin DeLaurier turns it over after the break. That's 14 turnovers on the game for Duke. Then it's Xavier Tillman turning it over with a 3-second violation.
RJ Barrett drives, draws a foul on Aaron Henry. He'll shoot two and make one. Duke leads, 59-58. Cassius Winston regains the lead with a runner in the paint.
On the Spartans' next defensive possession, he strips Barrett, and kicks it up the court to Tillman, who posterizes DeLaurier — and forces DeLaurier into his fourth foul. A free throw gives the Spartans a 4-point lead.
DeLaurier redeems himself with a layup inside on the other end, making it 63-61.
Media timeout: Michigan State 63, Duke 61 (3:32 2nd)
Michigan State regains lead with less than 8 to go
Xavier Tillman is back in the game for Michigan State. He makes his presence felt immediately, stealing a pass intended for Zion Williamson and throwing home a dunk on the other end.
Javin DeLaurier lays in a bucket to make it 54-53, Duke. He then rejects a shot by Winston on the other end, gets up the court, and scores again. He's got eight points and eight rebounds for the Blue Devils.
Kenny Goins drills a contested 3-pointer, tying the game at 56. I need an oxygen mask.
Matt McQuaid makes a magnificent reverse layup to give Michigan State a 58-56 lead.
Media timeout: Michigan State 58, Duke 56 (7:23 2nd)
Both teams finding groove from deep as Duke holds 1-point lead
RJ Barrett makes a pair of free throws to give Duke a 44-43 lead.
Cassius Winston draws a pair of defenders to the lane, kicks to Aaron Henry, who's able to make a move to get open and hit a jumper. Barrett scores on the other end to regain the lead.
Winston gets a screen on the perimeter and hits a 3-pointer to make it 48-46, Michigan State. Cam Reddish gets the same movement and matches Winston's 3-pointer. Duke leads by 1.
Williamson grabs the defensive board on Michigan State's next possession, then hits a 3 from the corner. Then it's Winston hitting an uncontested long ball, cutting Duke's lead to 52-51.
Media timeout: Duke 52, Michigan State 51 (10:36 2nd)
Michigan State-Duke trading leads at start of second
Michigan State comes out of the first half firing, with an Aaron Henry dunk giving the Spartans a 6-point lead. Zion Williamson breaks Duke's scoring drought with a layup.
Xavier Tillman is fouled inside and will go to the line. He makes one of two. On the other end, Williamson pulls down an offensive board and draws a foul on Tillman on an and-1 put-back. He misses the free throw. It's 37-34, Michigan State.
Henry drives and kicks to Tillman down low for a wide-open dunk.
Williamson then draws another foul on Tillman, forcing the Michigan State big man to the bench with his third of the game. Williamson makes the front end of two free throws; the Spartans quickly go the other way and Kenny Goins scores in transition.
The lead is up to 6.
Williamson is red hot. He drills a 3-pointer, giving him a game-high 15 points. One possession later, he bullies his way to the basket and lays in another 2 points. It's 41-40, Michigan State.
Tre Jones dunks to give the Blue Devils a 1-point lead, which Michigan State quickly regains with a Ward layup on the other end.
RJ Barrett draws a shooting foul and will head to the line.
Media timeout: Michigan State 43, Duke 42 (15:12 2nd)
13-0 run gives Michigan State lead at halftime
Xavier Tillman drills a 3-pointer, drawing the Spartans within 2. That's a 7-0 run for the Spartans. Marques Bolden misses a jumper; Kenny Goins grabs the rebound and kicks it up the floor to Cassius Winston, who hits a fadeaway. We're tied up at 30.
The Spartans have stormed back with force: Winston strips RJ Barrett, and Tillman scores in transition to give Michigan State a 32-30 lead.
Winston hits another layup with a few second remaining. Duke immediately turns it over, giving Michigan State the chance for some points with 1.7 seconds remaining.
Goins gets a 3-pointer off, but it doesn't fall.
Halftime: Michigan State 34, Duke 30
Duke goes on 12-0 run to take lead from Spartans
RJ Barrett puts home a jump shot after the break. Cam Reddish cuts to the hole on the Blue Devils' next possession, drawing a foul on Ward in the process. He makes both, giving Duke its first lead of the game, 22-21.
Kenny Goins misses a short jumper in the paint. Zion Williamson scores from the same spot on the other end. Duke is on a 6-0 run.
Cassius Winston misses a runner on the next possession, making Michigan State 0 of its last 4.
Cam Reddish drills a 3-pointer, extending the Duke lead to 6. Matt McQuaid airballs a step-back triple, and then Barrett hits another 3-pointer. Michigan State needs a reset.
Michigan State timeout: Duke 30, Michigan State 21 (5:20 1st)
Winston drives and has a look inside, but is unable to finish. Michigan State's scoring drought is inching toward four minutes.
Zion Williamson is called for his second foul of the game, forcing him to the bench.
Winston finally scores on a drive to the paint, hitting a layup and drawing a foul in the process. He misses the free throw. It's 30-23, Duke.
Winston scores again from the paint two possessions later.
Media timeout: Duke 30, Michigan State 25 (3:25 1st)
Second-chance points keeping Spartan lead intact
Aaron Henry airballs a 3-pointer as the shot clock expires. RJ Barrett hits the first 3-pointer of the game for either team, as the Blue Devils draw within 2.
Barrett makes a beautiful drive to the lane and puts home a reverse layup. Matt McQuaid hits Michigan State's first 3-pointer on the other end.
Tre Jones then scores inside for Duke, cutting Michigan State's lead to 19-18. After missing the first, Cassius Winston gets a second opportunity to hit a runner in the paint thanks to an offensive rebound by Xavier Tillman. It's 21-18, Michigan State.
Media timeout: Michigan State 21, Duke 18 (7:43 1st)
Duke yet to find stroke from 3, Spartans holding on to 5-point lead
Matt McQuaid dumps it down low to Nick Ward, who backs down Javin DeLaurier and puts up a shot that falls. Michigan State leads, 10-4.
Ward fouls Zion Williamson in the paint. The Duke sensation makes one of two free throws.
McQuaid throws down a vicious one-handed dunk on a fast break over DeLaurier.
DeLaurier rebounds from the play quickly, scoring on the other end.
Ward puts home another bucket inside. Michigan State leads by 7, Duke's largest margin of deficit in the tournament so far. Williamson then dunks over Kenny Goins to make it 14-9.
Michigan state gets a rebound after a missed jumper by Cassius Winston. Xavier Tillman finishes the possession with a strong layup.
Williamson misses a 3-pointer, but Tre Jones grabs the offensive rebound. He kicks it to RJ Barrett inside, who finishes with a layup over Goins.
Media timeout: Michigan State 16, Duke 11 (11:00 1st)
Michigan State forces four turnovers and takes lead to start game
Duke forward Cam Reddish is expected to play, but will not start, per CBS sideline reporter Tracy Wolfson.
The Blue Devils control the tip. Javin DeLaurier turns it over to Cassius Winston, who kicks it up to Kenny Goins for a breakaway dunk.
Matt McQuaid and RJ Barrett trade missed 3-pointers, but Duke gets the offensive rebound on Barrett's misfire. DeLaurier finishes off the possession with a dunk, tying things up at 2.
McQuaid drives and draws a shooting foul on Alex O'Connell. McQuaid misses the first, and Reddish checks in for Duke. McQuaid then misses the second. Still 2-2.
The Spartans force Reddish out of bounds on the next possession. That's two turnovers for the Blue Deviles less than three minutes in.
McQuaid then misses a 3, but the Blue Devils turn it over again. Winston misses two jump shots — one a 3-pointer — before McQuaid finishes off the possession with a layup.
Xavier Tillman adds another bucket inside on Michigan State's next possession. It's 6-2 Spartans.
Zion Williamson puts his first mark on this game, grabbing an offensive rebound and putting back a dunk.
Winston responds with a long 2-pointer.
Media timeout: Michigan State 8, Duke 4 (15:26 1st)
Michigan State shoots for its first trip to the NCAA Tournament Final Four since 2015 with a game against Duke on Sunday afternoon. Follow the action with live updates throughout the game by Nolan Bianchi of The Detroit News.
NO. 2 MICHIGAN STATE VS. NO. 1 DUKE
Tip-off: 5:05 p.m., Sunday, Capital One Arena, Washington
Records: Michigan State 31-6; Duke 32-5
Next up: Winner advances to Final Four and will face Texas Tech.