Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

算法作业

哈希法:用数组记录26个小写字母的个数,比较两个字符串中字符个数是否一样。

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] countArr = new int[26];
        for (int i = 0; i < s.length(); i++) {
            countArr[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            if (--countArr[t.charAt(i) - 'a'] < 0) {
                return false;
            }
        }
        for (int i = 0; i < countArr.length; i++) {
            if (countArr[i] != 0) {
                return false;
            }
        }
        return true;
    }
}

排序分组:将单词排序后作为key,保存到Map中,遍历后将map的values返回

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        if (strs == null || strs.length < 1) {
            return Collections.emptyList();
        }
        Map<String,List<String>> map = new HashMap<String,List<String>>();
        for (String str : strs) {
            char[] array = str.toCharArray();
            Arrays.sort(array);
            String sortStr = String.valueOf(array);
            List<String> strList = map.get(sortStr);
            if (strList == null) {
                strList = new ArrayList<String>();
                map.put(sortStr, strList);
            }
            strList.add(str);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

递归

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> resList = new ArrayList<Integer>();
        this.traversal(root, resList);
        return resList;
    }
    public void traversal(TreeNode node,List<Integer> resList) {
        if (node == null) {
            return ;
        }
        resList.add(node.val);
        this.traversal(node.left, resList);
        this.traversal(node.right, resList);
    }
}

迭代 : 利用栈,每次迭代弹出栈顶元素,然后先将右子节点压入栈,再将左子节点压入栈

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> outList = new LinkedList<Integer>();
        if (root == null) {
            return outList;
        }
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        stack.addLast(root);
        while (stack.peekLast() != null) {
            TreeNode last = stack.pollLast();
            outList.add(last.val);
            if (last.right != null) {
                stack.addLast(last.right);
            }
            if (last.left != null) {
                stack.addLast(last.left);
            }
        }
        return outList;
    }
}

递归

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> outList = new LinkedList<Integer>();
        this.traversal(root, outList);
        return outList;
    }

    public void traversal(TreeNode node, List<Integer> list) {
        if (node == null) {
            return;
        }
        this.traversal(node.left, list);
        list.add(node.val);
        this.traversal(node.right, list);
    }
}

迭代

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> outList = new LinkedList<Integer>();
        if (root == null) {
            return outList;
        }
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        TreeNode curNode = root;
        while (curNode != null || stack.peekLast() != null) {
            while (curNode != null) {
                stack.addLast(curNode);
                curNode = curNode.left;
            }
            TreeNode last = stack.pollLast();
            outList.add(last.val);
            curNode = last.right;
        }
        return outList;
    }
}

递归

class Solution {
    public List<Integer> preorder(Node root) {
        List<Integer> outList = new LinkedList<Integer>();
        this.traversal(root,outList);
        return outList;
    }

    public void traversal(Node node, List<Integer> list) {
        if (node == null) {
            return;
        }
        list.add(node.val);
        if (node.children != null) {
            for (Node childNode : node.children) {
                this.traversal(childNode, list);
            }
        }
    }
}