PORTLAND, Ore. -- Brandon Roy was merely following orders.
"Coach said, 'Whatever you do, try to get to the basket and try to draw the foul,' " Roy said. "They gave me a clear path for the layup and I was able to get it."
LaMarcus Aldridge had 24 points for the Blazers, who won their third straight. But it wasn't easy.
The Bucks went up 112-107 in the extra period after Andrew Bogut made a pair of free throws. Aldridge made a jumper for the Blazers before fouling out, and Travis Outlaw added two more free throws to narrow it to 112-111.
Milwaukee's Michael Redd missed a 3-point attempt with 32.9 seconds to go.
Roy hit his layup to give the Blazers a 113-112 lead, their first of overtime. After Mo Williams missed a layup, Steve Blake was fouled by Charlie Villanueva and made both the foul shots to give Portland a 115-112 lead.
Redd missed a jumper in the final seconds and afterward the officials reviewed whether Blake's loose ball foul came before the buzzer.
After 1.2 seconds was put back on the clock, Charlie Bell purposely made only one of the resulting free throws, and Outlaw grabbed the rebound and was fouled on the other end, making both of his for the final margin.
Williams had a season-high 33 points, 14 of them in the third quarter, for Milwaukee.
Roy also had eight rebounds and a season-high nine assists for the Blazers. Outlaw had 20 points, and Blake had a season-high 19.
"As a team, we stayed patient, stayed calm and believed in ourselves," Blake said. "We came out there and performed what we had to do down the stretch."
The Trail Blazers led by as many as 13 in the third quarter, but the Bucks closed the gap and took a 91-86 lead in the fourth after consecutive 3-pointers from Williams.
It was close from there on out. Redd's layup put the Bucks ahead 101-97 with 3:06 left. He added a pair of free throws to extend the margin.
Blake's 3-pointer for the Blazers with 1:15 to go narrowed it 103-101, but Bogut answered with a turnaround hook shot for Milwaukee with less than a minute left.
After Roy made a pair of free throws to narrow it again, the Blazers capitalized on a Milwaukee turnover and Aldridge was fouled by Bogut.
Aldridge made both foul shots to tie it with 15.2 seconds left, and Williams missed a 25-foot attempt with less than a second to go.
"I just wanted that last shot," he said. "When you're out on the road, you don't want to give them any time. I've shot that shot 100 times in my head and in the gym."
The Bucks have lost three straight and seven of their past eight games. They were coming off a 104-98 loss at Seattle on Friday night.
Milwaukee was without forward Bobby Simmons for the second straight game. Simmons was not with the team because of personal reasons, the team said.
After trailing for much of the first quarter, the Blazers went on a 13-0 run capped by Sergio Rodriguez's jumper that put them up 37-27 in the second.
The Bucks closed to within 43-41 on Bell's reverse layup, but Blake answered for the Blazers with a 3-pointer and Portland finished the first half up 57-51.
The Bucks were trailing 66-59 when Williams grabbed a pass meant for Blake and took it down the court for a pullup jumper.
The Blazers didn't let Milwaukee gain any momentum from the flashy move. Instead, they went on a 12-4 run to go up 78-65 after Martell Webster's 3-pointer.
Williams' impressive play continued into the fourth quarter when the Bucks came within 86-85, capped by his bounce pass to Bell that resulted in a 3-pointer.
Williams' own 3 put the Bucks ahead, then he added another to cap a 15-2 run and make 91-86.
"I just got it rolling for the first time in a while," Williams said. "It felt good to have it going like that."
- The Blazers reportedly plan to send rookie guard Taurean Green to the Developmental League.
- The Blazers collected donations at the game to help those impacted by last week's floods in the Pacific Northwest.
- The Bucks on Saturday assigned rookie guard Ramon Sessions to the D-League.
- It was the first overtime game for each team this season.