输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

示例 1:

输入: [10,2]
输出: "102"
示例 2:

输入: [3,30,34,5,9]
输出: "3033459"

提示:

0 < nums.length <= 100
说明:

输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

思路:贪心,具体证明略,其他文章写过。

class Solution {public String minNumber(int[] nums) {List<String> strList = new ArrayList<>();for (int num : nums) {strList.add(String.valueOf(num));}strList.sort((s1, s2) -> (s1 + s2).compareTo(s2 + s1));StringBuilder sb = new StringBuilder();for (String str : strList) {sb.append(str);}return sb.toString();}
}

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

示例 1:

输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"

字符串dp,看代码很容易看懂。

注意str.charAt(i - 2) != '0'必须加上,不加的例子:

class Solution {public int translateNum(int num) {String str = String.valueOf(num);int len = str.length();int[] dp = new int[len + 1];dp[0] = 1;for (int i = 1; i < len+1; ++i) {dp[i] += dp[i-1];if (i>1 && str.charAt(i - 2) != '0' && str.substring(i - 2, i).compareTo("25") < 1)dp[i] += dp[i - 2];}return dp[len];}
}

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

示例 1:

输入: 
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物

提示:

0 < grid.length <= 200
0 < grid[0].length <= 200

思路:经典dp,来一个超级标准的不压缩空间的一看就懂的写法吧。

class Solution {public int maxValue(int[][] grid) {if (grid.length == 0 )return 0 ;int[][] dp = new int[grid.length][grid[0].length] ;dp[0][0] = grid[0][0] ;for (int i=1 ; i<grid.length ; i++) {dp[i][0] = grid[i][0]+ dp[i-1][0] ;}for (int j=1 ; j<grid[0].length ; j++) {dp[0][j] = grid[0][j] + dp[0][j-1] ;}for (int i=1 ; i< grid.length ; i++) {for (int j=1 ; j < grid[0].length ; j++) {dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]) + grid[i][j] ;}}return dp[grid.length-1][grid[0].length-1] ;}
}

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

s.length <= 40000

滑动窗口的维护五花八门:

for循环往右扩,左端点起辅助作用,保证窗口符合要求:

class Solution {public int lengthOfLongestSubstring(String s) {int res = 0;Set<Character> set = new HashSet<>();for(int l = 0, r = 0; r < s.length(); r++) {char c = s.charAt(r);while(set.contains(c)) {set.remove(s.charAt(l++));}set.add(c);res = Math.max(res, r - l + 1);}return res;}
}

剑指offer:45-48记录相关推荐

  1. 剑指offer做题记录

    1. 剑指 Offer 03. 数组中重复的数字   力扣 class Solution { public:int findRepeatNumber(vector<int>& nu ...

  2. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  3. 剑指offer刷题记录 python3 Java

    剑指offer刷题记录 python3 Java 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 03. 数组中重复的数字 [★]剑指 Of ...

  4. 剑指Offer 刷题记录

    文章目录 剑指offer题目 01. 二维数组中的查找 02. 替换空格 03. 从尾到头打印链表 04. 重建二叉树 05. 两个堆栈模拟一个队列 06. 旋转数组的最小数字 07. 斐波那契数列 ...

  5. 剑指offer刷题记录(上)

    记录刷题过程,方便自己后期回顾 题目来自<剑指offer>,在牛客上OC,思路大多来自剑指offer,偶尔来自自己的碎碎念,代码自己瞎写的,如果有更优的方法请告诉我,谢谢大佬们 语言:py ...

  6. 剑指offer:63-66记录

    假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候 ...

  7. 剑指offer:39-42记录

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输 ...

  8. 剑指offer:22-25记录

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6.这个链 ...

  9. string类函数和牛客网剑指offer刷题记录

    1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...

  10. 剑指offer:50-53记录

    在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b" s = ""  ...

最新文章

  1. Why平台:Scalable是互联网公司的价值所在
  2. PicoBlaze性能
  3. 解析没有id的html,网络爬虫干货,还在用正则匹配html?专业的解析组件了解一下...
  4. C# ACCESS数据库操作类
  5. linux环境安装部署mark
  6. 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017
  7. java实现在线浏览zip文件及文件下载
  8. 用Matlab实现字符串分割(split)
  9. linux 2G内存够用吗,不管2G还是6G运存,为什么使用手机时都会先占用一半?
  10. c++ 数组置0_09c语言数组详解
  11. 一个资深系统管理员的O2O实践(三)
  12. QTable中header高度
  13. 人件第二版(中文版)pdf
  14. 企业域名和企业邮箱究竟有什么关系?
  15. CTE6备考与考试感悟
  16. 三维点图和三维PCA图
  17. IT新渠道眼中的高价值增长如何实现?
  18. 安利这几款软件给需要的你
  19. 色阶、灰度色彩模式、灰度等级
  20. 【预测模型】基于DNN深度神经网络实现minist数据集预测matlab源码

热门文章

  1. js 多个定时器_JS中的同步/异步编程
  2. JAVA写同步栈_tomcat实现的同步队列和同步栈
  3. asterisk的NAT配置
  4. rt5350 中断初始化
  5. ARM中断分析之四:WinCE的OAL层的中断分析
  6. WINCE 加入驱动DLL步骤
  7. php公交查询系统源代码,基于Smarty公交查询系统的设计与实现(PHP,MySQL)
  8. 650c公路车推荐_盘点2020年各价位高性价比入门公路车
  9. python闭环最短路径_最短路径算法的实现(dijskstra):Python
  10. python image 转成字节_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍