剑指 Offer 第九天

剑指 Offer 46. 把数字翻译成字符串

加了条件的青蛙跳格子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juDwGdOs-1626437866905)(C:\Users\tanglei\AppData\Roaming\Typora\typora-user-images\image-20210716192530687.png)]

public int translateNum(int num){
    String s = String.valueOf(num);
    int a = 1,b = 1;
    for(int i = 2;i<=s.lengh();i++){
        String tmp = s.substring(i-2,i);
        int c=tmp.compareTo("10")>=0 && tmp.compareTo("25")<=0?a+b:a;
        b = a;
        a = c;
    }
    return a
}
剑指 Offer 47. 礼物的最大价值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-znRXEcJD-1626437840977)(C:\Users\tanglei\AppData\Roaming\Typora\typora-user-images\image-20210716193224925.png)]

    public int maxValue(int[][] grid) {
        //边界判断
        if(grid==null||grid.length==0)
            return 0;
        int m=grid.length;
        int n=grid[0].length;
        //初始化dp的最上面一行,从左到右累加
        for(int i=1;i<n;i++){
            grid[0][i] = grid[0][i]+grid[0][i-1];
        }
        //初始化dp的最左边一列,从上到下累加
        for(int i=1;i<m;i++){
            grid[i][0] = grid[i][0]+grid[i-1][0];
        }
        //递推公式
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                grid[i][j] = grid[i][j] + Math.max(grid[i][j-1],grid[i-1][j]);
            }    
        }
        return grid[m-1][n-1];
    }
剑指 Offer 48. 最长不含重复字符的子字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oog3IeKB-1626437840981)(C:\Users\tanglei\AppData\Roaming\Typora\typora-user-images\image-20210716193336730.png )]

public int lengthOfLongestSubstring(String s) {
    Map<Character,Integer> dic = new HashMap<>();
    int res = 0,tmp=0;
    for(int j = 0;j<s.length();j++){
        int i = dic.getOrDefault(s.charAt(j),-1);
        dic.put(s.charAt(j),j);
        tmp = tmp<j-i?tmp+1:j-i;
        res = Math.max(res,tmp);
    }
    return res;
}
    public int lengthOfLongestSubstring(String s) {
        if (s.length() == 0)
            return 0;
        HashMap<Character, Integer> map = new HashMap<>();
        int max = 0;
        for (int i = 0, j = 0; i < s.length(); ++i) {
            if (map.containsKey(s.charAt(i))) {
                j = Math.max(j, map.get(s.charAt(i)) + 1);
            }
            map.put(s.charAt(i), i);
            max = Math.max(max, i - j + 1);
        }
        return max;
    }
剑指 Offer 49. 丑数

class Solution {
    public int nthUglyNumber(int n) {
        int[] dp = new int[n];  // 使用dp数组来存储丑数序列
        dp[0] = 1;  // dp[0]已知为1
        int a = 0, b = 0, c = 0;    // 下个应该通过乘2来获得新丑数的数据是第a个, 同理b, c

        for(int i = 1; i < n; i++){
            // 第a丑数个数需要通过乘2来得到下个丑数,第b丑数个数需要通过乘2来得到下个丑数,同理第c个数
            int n2 = dp[a] * 2, n3 = dp[b] * 3, n5 = dp[c] * 5;
            dp[i] = Math.min(Math.min(n2, n3), n5);
            if(dp[i] == n2){
                a++; // 第a个数已经通过乘2得到了一个新的丑数,那下个需要通过乘2得到一个新的丑数的数应该是第(a+1)个数
            }
            if(dp[i] == n3){
                b++; // 第 b个数已经通过乘3得到了一个新的丑数,那下个需要通过乘3得到一个新的丑数的数应该是第(b+1)个数
            }
            if(dp[i] == n5){
                c++; // 第 c个数已经通过乘5得到了一个新的丑数,那下个需要通过乘5得到一个新的丑数的数应该是第(c+1)个数
            }
        }
        return dp[n-1];
    }
}
剑指 Offer 50. 第一个只出现一次的字符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1PkMEB4i-1626437840985)(C:\Users\tanglei\AppData\Roaming\Typora\typora-user-images\image-20210716201350339.png)]

class Solution {
    public char firstUniqChar(String s) {
        HashMap<Character, Boolean> dic = new HashMap<>();
        char[] sc = s.toCharArray();
        for(char c : sc)
            dic.put(c, !dic.containsKey(c));//如果 hashMap 中是否存在指定的 key 对应的映射关系返回 true,否则返回 false。
        for(char c : sc)
            if(dic.get(c)) return c;
        return ' ';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值