Денис Захаров начал заниматься баскетболом в СДЮШОР «Белгород», под руководством Виктора Николаевича Шведа.
Выступая за баскетбольный клуб «Спарта и К» в Суперлиге, Захаров являлся одним из лидеров своей команды.
В мае 2013 года перешёл в «Нижний Новгород» в результате трёхстороннего обмена[1].
В 2013 году подписал контракт с московским «Динамо». В составе команды стал бронзовым призёром Суперлиги 2014/2015 и был признан «Лучшим атакующим защитником» чемпионата. В этом же сезоне, вместе с командой дошёл до финала Кубка России, и по итогам турнира был признан "Лучшим разыгрывающим «Финала четырёх».
Перед началом сезона 2015/2016 московское «Динамо», из-за финансовых проблем, снялось с участия в чемпионате Суперлиги. Став свободным агентом, Захаров в октябре 2015 года перешёл в «Енисей»[2]. За красноярскую команду Денис сыграл 25 игр в Единой лиге ВТБ и в среднем набирал 9,5 очков и 1,8 передач. Денис помог «Енисею» пробиться в «Финал четырёх» Кубка Европы ФИБА, набирая в 19 матчах в среднем 7,8 очка и 1,3 передачи.
В январе 2016 года Захаров был признан «Лучшим молодым игроком» Единой лиги ВТБ по итогам месяца[3].
В июле 2016 года Захаров подписал с «Локомотивом-Кубань» контракт на 2 года[4]. В составе краснодарской команды провёл 16 матчей в Единой лиге ВТБ, набирая в среднем 1,5 очка за 6 игровых минут.
В июле 2017 года Захаров вернулся в «Енисей»[5]. В 23 играх Единой лиги ВТБ Денис проводил на площадке 21 минуту и набирал 10 очков.
В июле 2018 года Захаров продлил контракт с «Енисеем»[6]. В 26 играх Единой лиги ВТБ Денис в среднем набирал 9,9 очков, 2,7 подбора и 2,2 передачи.
В августе 2019 года Захаров подписал с «Енисеем» новый контракт[7].
29 января 2020 года стал известен состав команд на «Матч всех звёзд» Единой лиги ВТБ. По итогам голосования болельщиков и анкетирования СМИ, в котором приняли участие 22 издания, Захаров попал в состав команды «Звёзд России»[8]. В этой игре он провёл на площадке 6 минут 59 секунд и отметился 4 очками и 3 передачами[9].
Выступал за кадетскую сборную России U 16 на чемпионате Европы (2009) и за молодёжную сборную России U20 на чемпионатах Европы (2012 и 2013).
В марте 2015 года Захаров вошёл в расширенный состав резервной сборной России[22].
На Универсиаде 2015 года, в составе студенческой сборной России, Денис стал бронзовым призёром турнира.
Летом 2016 года Захаров получил приглашение в «Открытый лагерь РФБ», по итогам которого несколько игроков смогут присоединиться к тренировкам основной сборной России[23]. После заключительного этапа подготовки и лагеря в целом, решением тренерского штаба во главе с Сергеем Базаревичем, Захаров продолжил работу с национальной командой[24].
В июне 2017 года Захаров был включён в состав сборной России, составленный по итогам завершившегося «Открытого лагеря РФБ», и принял участие в баскетбольном турнире Спортивных игр БРИКС[25]. Одержав победы над всеми тремя соперниками (ЮАР, Индия и Китай) сборная России стала победителем турнира[26].
В феврале 2021 года Захаров был вызван на сбор национальной команды для подготовки к двум матчам квалификации Кубка мира-2023 со сборной Нидерландов[29].