枚举法

Generate Parentheses

这题和二叉树其实挺像的,因为在每一个位置都只有两种可能 "(" 和 ")".

(1)首先left如果大于0,就一直append left,相当于获得一个有不同长度left (的集合

(2)然后针对每个left,append上相应的right ),相当于获得right)的集合

Palindrome Partitioning

本质上是character subset问题.

(1)这个subset的字母必须达到一定长度才可以

(2)每次加进来的不是一个字母,而是一个substring

(3)必须是palindrome才可以加进来

public class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new LinkedList<>();
        helper(res, new LinkedList<String>(), s, 0);
        return res;
    } 
    
    private void helper(List<List<String>> res, List<String> tmp, String str, int pos){
        if(pos == str.length()){
            res.add(new LinkedList<String>(tmp));
            return;
        }
        
        for(int i = pos; i < str.length(); i++){
            String sub = str.substring(pos, i+1);
            if(isPalindrome(sub)){
                tmp.add(sub);
                helper(res, tmp, str, i+1);
                tmp.remove(tmp.size()-1);
            }
        }
    }


//本题目本质上和subset没啥区别,只是如果是palindrome的情况下才加进去   


    private boolean isPalindrome(String s){
        int i = 0, j = s.length() - 1;
        while(i < j){
            if(s.charAt(i) == s.charAt(j)){
                i++;
                j--;
            } else {
                return false;
            }
        }
        return true;
    }
}

Letter Combinations of a Phone Number

两个阿拉伯数字相减就是绝对值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章