class ĠCombin ation Sum Two Ġ{ ĊĊĠĠĠ Ġfun Ġcombination Sum 2 ( candidates : ĠInt Array , Ġtarget : ĠInt ) Ġ: ĠList < List < Int >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinitial List Ġ= Ġcandidates . toList (). grouping By Ġ{ Ġit Ġ}. each Count () ĊĠĠĠĠĠĠĠ Ġval Ġsums Ġ= Ġmutable ListOf < List < Int >>() ĊĠĠĠĠĠĠĠ Ġvar Ġqueue Ġ= Ġmutable ListOf ( Sum List With Map ( freq Map Ġ= Ġinitial List . to Mutable Map ())) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġqueue . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . sum Ġ== Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsums . add ( item . list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( item . sum Ġ< Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Items Ġ= Ġitem . freq Map . keys . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Copy Ġ= Ġitem . freq Map . to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Copy [ it ]= Ġmap Copy [ it ] !! - 1 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map Copy [ it ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Copy . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġitem . sum + it ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġitem . list + it ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSum List With Map ( sum , new List . to Mutable List (), map Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġit . sum Ġ<= Ġtarget Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . addAll ( new Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġsums . map Ġ{ Ġit . sorted () Ġ}. distinct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSum List With Map ( var Ġsum : ĠInt Ġ= Ġ 0 , Ġval Ġlist : ĠMutable List < Int > Ġ= Ġmutable ListOf (), Ġval Ġfreq Map Ġ: ĠMutable Map < Int , Int >) Ċ }