当前位置:   article > 正文

每日5题Day2 - LeetCode 6 - 10

每日5题Day2 - LeetCode 6 - 10

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:6. Z 字形变换 - 力扣(LeetCode)

  1. class Solution {
  2. public String convert(String s, int numRows) {
  3. //特殊情况的判定
  4. if(numRows < 2){
  5. return s;
  6. }
  7. //我们专门为每一行放一个list
  8. List<StringBuilder> rows = new ArrayList<>();
  9. for(int i = 0; i < numRows; i++){
  10. //对于每一行我们给一个sb
  11. rows.add(new StringBuilder());
  12. }
  13. //下面是模拟过程,不断的上下,使得行数在模拟字符串的顺序遍历顺序上下跳动
  14. int i = 0, flag = -1;
  15. for(char ch : s.toCharArray()){
  16. //每次我们都把当前取出来的字母放进对应行的sb中
  17. rows.get(i).append(ch);
  18. //注意两个方向的转变
  19. if(i == 0 || i == numRows - 1){
  20. flag = -flag;
  21. }
  22. i += flag;
  23. }
  24. //最后的结果sb,我们对于原来rows,我们分别把每一行的元素放进来,因为题目要求最后返回1从左到右 2从上到下的字母序列
  25. StringBuilder res = new StringBuilder();
  26. for(StringBuilder row : rows){
  27. res.append(row);
  28. }
  29. //注意以字符串形式来返回
  30. return res.toString();
  31. }
  32. }

第二题:7. 整数反转 - 力扣(LeetCode)

  1. class Solution {
  2. public int reverse(int x) {
  3. //转为字符串
  4. String str = String.valueOf(x);
  5. //判断第一个字符是否为正数
  6. int flag = str.charAt(0) == '-' ? -1 : 1;
  7. StringBuilder sb = new StringBuilder();
  8. //不同范围进行一个逆序
  9. if (flag == 1) {
  10. for (int i = str.length() - 1; i >= 0; i--) {
  11. sb.append(str.charAt(i));
  12. }
  13. } else {
  14. for (int i = str.length() - 1; i > 0; i--) {
  15. sb.append(str.charAt(i));
  16. }
  17. }
  18. //使用try catch来避免超范围
  19. try {
  20. return Integer.parseInt(sb.toString()) * flag;
  21. } catch (NumberFormatException e) {
  22. return 0;
  23. }
  24. }
  25. }

第三题:8. 字符串转换整数 (atoi) - 力扣(LeetCode)

  1. class Solution {
  2. public int myAtoi(String s) {
  3. if (s == null || s.length() == 0) {
  4. return 0;
  5. }
  6. int index = 0;
  7. // 跳过前导空格
  8. while (index < s.length() && s.charAt(index) == ' ') {
  9. index++;
  10. }
  11. // 判断符号
  12. int sign = 1;
  13. if (index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
  14. sign = s.charAt(index) == '-' ? -1 : 1;
  15. index++;
  16. }
  17. // 读取数字部分
  18. long result = 0;
  19. while (index < s.length() && Character.isDigit(s.charAt(index))) {
  20. //数字的形式 把原来的*10,现在的转为数字加上去
  21. result = result * 10 + (s.charAt(index) - '0');
  22. if (result > Integer.MAX_VALUE) {
  23. return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
  24. }
  25. index++;
  26. }
  27. return (int) (sign * result);
  28. }
  29. }

第四题:9. 回文数 - 力扣(LeetCode)

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. //转为字符串
  4. String str = String.valueOf(x);
  5. int l = 0, r = str.length() - 1;
  6. //从两边遍历过,但凡有不相等的直接返回false
  7. while(l < r){
  8. if(str.charAt(l) != str.charAt(r)){
  9. return false;
  10. }
  11. l++;
  12. r--;
  13. }
  14. //遍历结束,没出问题返回true
  15. return true;
  16. }
  17. }

 第五题:10. 正则表达式匹配 - 力扣(LeetCode)

  1. class Solution {
  2. public boolean isMatch(String s, String p) {
  3. // 初始化字符串s和p的长度,加1是因为dp数组的索引从0开始
  4. int m = s.length() + 1, n = p.length() + 1;
  5. // 创建一个二维布尔数组dp,用于存储匹配状态
  6. boolean[][] dp = new boolean[m][n];
  7. // 初始化dp数组的第一行第一个元素为true,表示空字符串与空模式匹配
  8. dp[0][0] = true;
  9. // 初始化dp数组中模式p中包含星号(*)的情况
  10. // 只有当模式p中的字符是星号(*)时,我们才考虑空字符串s与模式p的匹配
  11. for(int j = 2; j < n; j += 2)
  12. dp[0][j] = dp[0][j - 2] && p.charAt(j - 1) == '*';
  13. // 遍历字符串s和模式p
  14. for(int i = 1; i < m; i++) {
  15. for(int j = 1; j < n; j++) {
  16. // 当模式p中的当前字符是星号(*)时
  17. // 有两种情况:星号(*)表示前面的元素可以出现0次或多次
  18. // 1. 星号(*)前面的字符没有在字符串s中匹配(即dp[i][j - 2])
  19. // 2. 星号(*)前面的字符在字符串s中匹配了一次(即dp[i - 1][j]),并且当前字符s.charAt(i - 1)与模式p中星号(*)前面的字符匹配,或者星号(*)前面的字符是点(.)
  20. dp[i][j] = p.charAt(j - 1) == '*' ?
  21. dp[i][j - 2] || dp[i - 1][j] && (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.') :
  22. // 当模式p中的当前字符不是星号(*)时
  23. // 需要模式p中当前字符与字符串s中的当前字符匹配,或者模式p中的当前字符是点(.)(表示匹配任何单个字符)
  24. // 同时,还需要之前的状态dp[i - 1][j - 1]为true(即前面的子串和模式匹配)
  25. dp[i - 1][j - 1] && (p.charAt(j - 1) == '.' || s.charAt(i - 1) == p.charAt(j - 1));
  26. }
  27. }
  28. // 返回dp数组的最后一个元素,即字符串s和模式p的匹配结果
  29. return dp[m - 1][n - 1];
  30. }
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/615498
推荐阅读
相关标签
  

闽ICP备14008679号