LeetCode: 17. 电话号码的字母组合
描述:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
class Solution {
private List<String> list = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if(digits.length() == 0) return list;
Map<Integer,String> map = new HashMap<>();
map.put(2,"abc");
map.put(3,"def");
map.put(4,"ghi");
map.put(5,"jkl");
map.put(6,"mno");
map.put(7,"pqrs");
map.put(8,"tuv");
map.put(9,"wxyz");
StringBuilder res = new StringBuilder();
backtracking(digits,map,0,res);
return list;
}
public void backtracking(String digits, Map<Integer,String> map, int index, StringBuilder res) {
if(index == digits.length()){
list.add(res.toString());
return;
}
String str = map.get(digits.charAt(index) - '0');
for (int i = 0; i < str.length(); i++) {
res.append(str.charAt(i));
backtracking(digits,map,index+1,res);
res.deleteCharAt(res.length()-1);
}
}
}
LeetCode: 108. 将有序数组转换为二叉搜索树
描述:
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
left > right
,class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return ToBST(nums,0,nums.length-1);
}
public TreeNode ToBST(int[] nums, int left, int right){
if(left > right) return null;
int mid = left + (right - left) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = ToBST(nums,left,mid-1);
root.right = ToBST(nums,mid+1,right);
return root;
}
}
LeetCode: 116. 填充每个节点的下一个右侧节点指针
描述:
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
class Solution {
public Node connect(Node root) {
if(root == null) return null;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
int size = queue.size();
while(size != 0) {
Node top = queue.poll();
if(size != 1){
top.next = queue.peek();
}
if(top.left != null) queue.offer(top.left);
if(top.right != null) queue.offer(top.right);
size--;
}
}
return root;
}
}
LeetCode: 162. 寻找峰值
描述:
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n)
的算法来解决此问题。
nums[mid] > nums[mid+1]
, 峰值在左边, 让 right = mid
nums[mid] < nums[mid+1]
, 峰值在右边, 让 left = mid + 1
right <= left
, 结束循环class Solution {
public int findPeakElement(int[] nums) {
int left = 0;
int right = nums.length-1;
while(left < right) {
int mid = left + (right - left) / 2;
if(nums[mid] > nums[mid+1]){
right = mid;;
}else{
left = mid+1;
}
}
return left;
}
}
LeetCode: 171. Excel 表列序号
描述:
给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
ans = (ans * 原进制数) + (10进制表示的数字)
(ans初始为0)class Solution {
public int titleToNumber(String columnTitle) {
int ans = 0;
for(int i = 0; i < columnTitle.length() ;i++) {
ans =(ans * 26) + (columnTitle.charAt(i)-'A'+1);
}
return ans;
}
}
LeetCode: 172. 阶乘后的零
描述:
给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
class Solution {
public int trailingZeroes(int n) {
int count = 0;
while( n / 5 != 0) {
count += n/5;
n /= 5;
}
return count;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wangzhi430.blog.csdn.net/article/details/125750269
内容来源于网络,如有侵权,请联系作者删除!