Personally I would use a montage for this rather than a state machine. Unless the way the combos work is they need to be arbitrary (i.e. Attack 1 needs to blend seamlessly to Attack 2 or Attack 3, but Attack 2 also needs to be able to blend seamlessly to Attack 1 or Attack 3), a Montage is pretty much built for this. You can think of each attack as being an animation that starts from the end of the last anim (idle for the first move in a combo, otherwise the prior attack) and ends with a back-to-idle animation, and then use montage sections to indicate transition points where queued inputs will change the ending section from “back-to-idle” to the next attack. This is how I do combos.
From a State Machine though, you could simplify things a lot by using multiple state machines; you have your standard locomotion state machine, and a second combo state machine, and just blend from locomotion’s output to the combo’s output using a Bool and a Blend Pose node in the master anim graph.
This is how I handle state transitions between my character’s multiple gameplay states and a “taking damage” state; taking damage is its own graph, and the anim graph just flips from whatever the main state machine is doing to that graph, rather than trying to connect every possible state WITHIN the graph to a “take damage” state.