LeetCode刷题记---1104/1716/1436

1104. 二叉树寻路(中等)

在这里插入图片描述

解题思路:这道题明显的就是找规律,将label值除以2向下取整然后关于二叉树中间对折一下即为上一个节点的值,然后将该值赋值给label重复上面的步骤直到label为1即可。
例如:label为14,除以2后为7,取对称的那个值4;4除以2为2,取对称值为3;然后除以2等于1,最后得出答案为14-4-3-1,然后将这个反转为1-3-4-14,返回答案。

代码:

package LeetCode.Code2022.January;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Solution1104 {
    public List<Integer> pathInZigZagTree(int label) {

        List<Integer> ans = new ArrayList<>();
        if (label == 1) {
            ans.add(1);
            return ans;
        }
        int num;
        int level = getLevel(label);
        ans.add(label);
        while (level > 2){
            level--;
            num = label / 2;
            int maxVal = (int) Math.pow(2, level) - 1;
            int minVal = maxVal - (int) Math.pow(2, level - 1);
            int midVal = minVal + ((maxVal - minVal) >> 1);
            num = midVal + (midVal - num + 1);
            ans.add(num);
            label = num;
        }
        ans.add(1);
        Collections.reverse(ans);
        return ans;

    }
    int getLevel(int label) {
        int level = 1;
        while (Math.pow(2, level) - 1 < label) {
            level++;
        }
        return level;
    }


}

1716.计算力扣银行的钱(简单)

在这里插入图片描述

解题思路:找规律

代码:

package LeetCode.Code2022.January;

public class Solution1716 {
    public int totalMoney(int n) {

        int a = n / 7;
        int b = n % 7;
        if (b == 0) {
            return (7 * a * a + 49 * a) / 2;
        } else {
            return (7 * a * a + 49 * a) / 2 + (2 * a + b + 1) * b / 2;
        }

    }
}

1436.旅行的终点站(简单)

在这里插入图片描述
解题思路:先遍历一遍paths,将cityBi加入到Set中(因为终点站只可能在这个地方出现),然后再次遍历paths,将出现在cityAi的城市从Set中删除,剩下的唯一一个即为终点站。

代码:

package LeetCode.Code2022.January;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Solution1436 {
    public String destCity(List<List<String>> paths) {

        Set<String> cities = new HashSet<>();
        for (List<String> l : paths) {
//            cities.add(l.get(0));
            cities.add(l.get(1));
        }
        for (List<String> l : paths) {
            cities.remove(l.get(0));
        }
        String ans = "";
        for (String s : cities) {
            ans = s;
        }
        return ans;

    }
}

1446.连续字符

在这里插入图片描述
解题思路:统计最长的由单个字符构成的字符串长度。

代码:

package LeetCode.Code2022.January;

public class Solution1446 {
    public int maxPower(String s) {

        int maxSameLen = 1;
        boolean flag = false;
        for (int i = 1; i < s.length(); i++) {
            int j = i;
            while (i < s.length() && s.charAt(i - 1) == s.charAt(i)) {
                i++;
                flag = true;
            }
            if (flag) {
                maxSameLen = Math.max(maxSameLen, i - j + 1);
                i--;
                flag = false;
            }
        }
        return maxSameLen;
        
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值