Medlemmar av extremistgruppen al-Shabab, med band till al-Qaida, tog sig på fredagskvällen in på hotellet i centrala Mogadishu.
Strider mellan angriparna, som ska ha barrikaderat sig på övre våningen på hotellet, och säkerhetsstyrkor fortsatte in på lördagskvällen, och först strax före midnatt, svensk tid, uppgav säkerhetsstyrkor att striderna var över.
– Säkerhetsstyrkorna har avslutat belägringen och attentatsmännen är döda, vi har inte sett något beskjutning inifrån byggnaden den senaste timmen, säger en myndighetskälla till AFP.
Enligt polisen har de flesta civila kunnat föras ut från hotellet efter ett komplext räddningsuppdrag, men minst 20 personer har dött. Dessutom har 40 människor skadats vid hotellattacken och en separat attack i ett annat område i huvudstaden.
Polistalespersonen Abdifatah Adan Hassan säger att en explosion skedde när en självmordsbombare tvingade sig in på hotellet med flera andra beväpnade män. Enligt vittnen ska ytterligare en explosion ha inträffat kort därefter.
Den islamistiska terrororganisationen al-Shabab har tagit på sig ansvaret för hotellattacken.
Attacken är den största i Mogadishu sedan expresidenten Hassan Sheikh Mohamud på nytt valdes till landets president i maj, efter månader av politisk instabilitet.