320 Generalized Abbreviation

    /*
     * 320 Generalized Abbreviation 
     * 2016-7-6 by Mingyang 
     * 我一开始按照自己的方法去做,111a,这种只是每个位数上面替代成1,然后最后再把相连的数加起来
     * 但是后面发现这个方法太麻烦了,参考了网上的解法:
     * 对于每一个char,我们要么留着,要么变为数字,那位为了留着,我们加到现在的current里面,继续dfs
     * 如果变数字,我们count++,当我们到最后的时候如果count!=0或者需要加char的时候
     * 检查count是否为0,不为0就把数字粘上去,然后变为0
     */
    public static List<String> generateAbbreviations(String word) {
        List<String> ret = new ArrayList<String>();
        dfs1(ret, word, 0, "", 0);
        return ret;
    }
    private static void dfs1(List<String> ret, String word, int pos, String cur, int count) {
        if (pos == word.length()) {
            if (count > 0)
                cur += count;
            ret.add(cur);
        } else {
            dfs1(ret, word, pos + 1, cur, count + 1);
            dfs1(ret, word, pos + 1, cur + (count > 0 ? count : "") + word.charAt(pos), 0);
        }
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5648849.html