- Excel 表中某个范围内的单元格
简单题。
自己的(1ms,O(mn))
class Solution {
public List<String> cellsInRange(String s) {
List<String> ans = new ArrayList<>();
char[] st = new char[2];
st[0] = s.charAt(0);
st[1] = s.charAt(1);
ans.add(new String(st));
while(true){
if(st[1] + 1 <= s.charAt(4)){
st[1] ++;
ans.add(new String(st));
}
else{
if(st[0] + 1 <= s.charAt(3)){
st[0] ++;
st[1] = s.charAt(1);
ans.add(new String(st));
}
else
break;
}
}
return ans;
}
}
- 向数组中追加 K 个整数
排序后,遍历
暂时找不到java更优的写法
自己的(2685ms)
class Solution {
public long minimalKSum(int[] nums, int k) {
long ans = 0;
Arrays.sort(nums);
int index = 0;
for(int i = 1; ; i++){
if(index >= nums.length)
break;
if(k == 0)
return ans;
if(i < nums[index]){
ans += i;
k --;
}
else{
while(nums[index] < i + 1){
index ++;
if(index >= nums.length)
break;
}
}
}
ans += (long)(2 * nums[nums.length - 1] + 1 + k) * k / 2;
return ans;
}
}
- 根据描述创建二叉树
正常模拟建树即可
我的做法是,遍历 descriptions 得到每个节点的父节点是谁,每个节点的字节有谁。
通过并查集找到根节点 ,然后从根节点开始递归建树
不递归的代码更简洁一点
class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
Map<Integer,TreeNode> map = new HashMap<>();
int[] p = new int[100001];
for(int i = 0;i < descriptions.length; i++){
p[descriptions[i][1]] = descriptions[i][0];
map.put(descriptions[i][0],map.getOrDefault(descriptions[i][0],new TreeNode(descriptions[i][0])));
map.put(descriptions[i][1],map.getOrDefault(descriptions[i][1],new TreeNode(descriptions[i][1])));
if(descriptions[i][2] == 1)
map.get(descriptions[i][0]).left = map.get(descriptions[i][1]);
else
map.get(descriptions[i][0]).right = map.get(descriptions[i][1]);
}
int s = descriptions[0][1];
while(p[s] != 0){
s = p[s];
}
return map.get(s);
}
}