题目链接:1079.活字印刷

    1. class Solution {
    2. int res;
    3. public int numTilePossibilities(String tiles) {
    4. int a[] = new int [26];
    5. for (int i = 0; i <tiles.length() ; i++) {
    6. a[tiles.charAt(i)-'A'] = a[tiles.charAt(i)-'A']+1;
    7. }
    8. res =0;
    9. god(a);
    10. return res;
    11. }
    12. public void god(int a[])
    13. {
    14. for (int i = 0; i <a.length ; i++) {
    15. if(a[i]==0)
    16. {
    17. continue;
    18. }
    19. res+=1;
    20. a[i]=a[i]-1;
    21. god(a);
    22. a[i] = a[i]+1;
    23. }
    24. return;
    25. }
    26. }

    image.png
    我们只要一开始做一个字母频次统计,如果当前这个字母的频次为 00,就不再往下执行,马上要回溯了,在回溯的过程中一定要记得状态重置。**