Integer to English Words
给一个数字, 返回英文表示. 从大到小判断呗..
给一个数字, 返回英文表示. 从大到小判断呗..
给一个n叉树, 返回最深的depth.
给一个偶数个数的数组, 返回其中任意两个数组成pair的最小值的和.
给一个二叉树, 返回tilt, tilt的定义是左子树的和与右子树的和的绝对差. 简单的遍历一下就可以.
给一个string和一个字典, 求字典中最长的字, 可以获得的通过删string的字符串. 设置一个i, 然后遍历字典中每个字符串, 然后遍历string的每个字符, 记录有多少个字符和字典的字符串的字符相同. 如果相同就记录为longest.
给一个数字n, 返回所有可能的组合数组的个数, 这个数组满足两个条件, 一个是i上的数能乘除array[i], 一个是array[i]能整除i. 这个题直接dfs其实很好写, 但是太慢了, 加上剪枝也过不去. 看了下答案, 答案也是dfs和剪枝. 但是他用一个memo数组,表示use[i]表示是否用i这个index上的digit, 所以答案的dfs是直接数数组的个数, 即每个递归都表示是否在当前pos上的digit可以表示一个beautiful排序. 如果pos > N, 那么就意味着找到了一个数组满足这个条件.
给一个amount给一个coin数组, 问从coin中组成amount的多少种可能. 这个是典型的dp题, 设dp[i]是i块钱的找零个数. 那么我们就可以推断出, dp[i] += dp[i-coin[j]], 但是dp的初始值怎么设计? 我们设dp[0] = 1, 这意味着当, 当前的coin的和等于amount的时候, 算作一种找零方法.
一个数是Perfect number就是他的factor的和等于这个数. 那么先求factor, 然后求和就可以了.
给一个二叉树, 找每层最大的值. 直接层序扫描.
最长回文子序列, 首先这个子序列就是substring, 这题用dp做, dp[i][j]表示在substring(s, i, j)的最长回文子序列. 这时,有一下集中情况: i==j, 这时候就是一个字符,当前最长回文子序列是1 i>j, 这时候越界了, 返回0 i<j时, 我们需要判断i和j的字符是不是相同, 如果相同, 继续探索i+1和j-1的答案并且加上i和j作为答案,即+2 如果不同, 则当前的i和j无法构成回文, 因为我们需要的是longest,所以选择i+1和j-1之间较大的那个.