给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int G[20 ]; int numTrees (int n) { G[0 ] = 1 , G[1 ] = 1 ; for (int i = 2 ; i <= n; ++i) { for (int j = 1 ; j <= i; ++j) { G[i] += G[j-1 ] * G[i-j]; } } return G[n]; }
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
1 2 3 4 5 6 7 8 9 10 int titleToNumber (string columnTitle) { int num = 0 , n = columnTitle.size (); for (int i = 0 ; i < n; ++i) { num = num * 26 + (columnTitle[i] - 'A' + 1 ) ; } return num; }
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*‘ 可以匹配任意字符串(包括空字符串)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 bool isMatch (string s, string p) { int i, j = 0 ; if (p.size () == 0 ) { return s.size () == 0 ; } for (i = 0 ; i < p.size (); ) { if (j == s.size ()) { if (p[i]!='*' ) return false ; else i++; } for ( ; j < s.size (); ) { if (i >= p.size ()) return false ; if (p[i] != '*' && p[i] != '?' ) { if (p[i] == s[j]) { i++, j++; continue ; } else { return false ; } } if (p[i] == '?' ) { i++,j++; continue ; } if (p[i] == '*' ) { if (i == p.size ()-1 ) { return true ; } while (i < p.size () && p[i] == '*' ) { i++; } char c; if (i == p.size ()) { return true ; } else { c = p[i]; } while (j < s.size ()) { if (s[j] == c || c == '?' ) { if (isMatch (s.substr (j,s.size ()), p.substr (i,p.size ()))) { return true ; } } j++; } if (j == s.size ()) { return false ; } } } } return true ; }
一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。 机器人试图达到网格的右下角,问总共有多少条不同的路径?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int a[101 ][101 ]; int uniquePaths (int m, int n) { a[0 ][0 ] = a[1 ][1 ] = a[1 ][0 ] = a[0 ][1 ] = 0 ; for (int i = 1 ; i <= m; ++i) { a[i][1 ] = 1 ; } for (int i = 1 ; i <= n; ++i) { a[1 ][i] = 1 ; } for (int i = 2 ; i <= m; ++i) { for (int j = 2 ; j <= n; ++j) { a[i][j] = a[i-1 ][j] + a[i][j-1 ]; } } return a[m][n]; }
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution {public : string longestCommonPrefix (vector<string>& strs) { string prefix; int index = 0 ; for (string str = strs[0 ]; index < str.size (); index++) { char c = str[index]; for (string str : strs) { if (str == "" ) return "" ; if (c != str[index] || index >= str.size ()) { return prefix; } } prefix.push_back (c); } return prefix; } };