Brute-force Attack [AtCoder Beginner Contest 029 C]
以前記事に書いた再帰関数をそのまま流用できる問題です。
・再帰関数で部分集合を全列挙する - 文系プログラマーのプログラミング備忘録
枝分かれの部分を "a","b","c" の3つにして、終了条件を長さが n になったときにすればよいです。
void solve () { dfs(nextInt(), new StringBuilder("")); } static void dfs (int n, StringBuilder sb) { if (n == 0) { System.out.println(sb); return; } dfs(n-1, new StringBuilder(sb).append("a")); dfs(n-1, new StringBuilder(sb).append("b")); dfs(n-1, new StringBuilder(sb).append("c")); }
競プロをはじめたときはイメージしにくくて苦手だった再帰関数ですが、だんだん慣れてきました。