赞
踩
每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!
- class Solution {
- public String convert(String s, int numRows) {
- //特殊情况的判定
- if(numRows < 2){
- return s;
- }
- //我们专门为每一行放一个list
- List<StringBuilder> rows = new ArrayList<>();
- for(int i = 0; i < numRows; i++){
- //对于每一行我们给一个sb
- rows.add(new StringBuilder());
- }
- //下面是模拟过程,不断的上下,使得行数在模拟字符串的顺序遍历顺序上下跳动
- int i = 0, flag = -1;
- for(char ch : s.toCharArray()){
- //每次我们都把当前取出来的字母放进对应行的sb中
- rows.get(i).append(ch);
- //注意两个方向的转变
- if(i == 0 || i == numRows - 1){
- flag = -flag;
- }
- i += flag;
- }
- //最后的结果sb,我们对于原来rows,我们分别把每一行的元素放进来,因为题目要求最后返回1从左到右 2从上到下的字母序列
- StringBuilder res = new StringBuilder();
- for(StringBuilder row : rows){
- res.append(row);
- }
- //注意以字符串形式来返回
- return res.toString();
- }
- }
- class Solution {
- public int reverse(int x) {
- //转为字符串
- String str = String.valueOf(x);
- //判断第一个字符是否为正数
- int flag = str.charAt(0) == '-' ? -1 : 1;
- StringBuilder sb = new StringBuilder();
- //不同范围进行一个逆序
- if (flag == 1) {
- for (int i = str.length() - 1; i >= 0; i--) {
- sb.append(str.charAt(i));
- }
- } else {
- for (int i = str.length() - 1; i > 0; i--) {
- sb.append(str.charAt(i));
- }
- }
- //使用try catch来避免超范围
- try {
- return Integer.parseInt(sb.toString()) * flag;
- } catch (NumberFormatException e) {
- return 0;
- }
- }
- }
第三题:8. 字符串转换整数 (atoi) - 力扣(LeetCode)
- class Solution {
- public int myAtoi(String s) {
- if (s == null || s.length() == 0) {
- return 0;
- }
- int index = 0;
- // 跳过前导空格
- while (index < s.length() && s.charAt(index) == ' ') {
- index++;
- }
- // 判断符号
- int sign = 1;
- if (index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
- sign = s.charAt(index) == '-' ? -1 : 1;
- index++;
- }
- // 读取数字部分
- long result = 0;
- while (index < s.length() && Character.isDigit(s.charAt(index))) {
- //数字的形式 把原来的*10,现在的转为数字加上去
- result = result * 10 + (s.charAt(index) - '0');
- if (result > Integer.MAX_VALUE) {
- return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
- }
- index++;
- }
- return (int) (sign * result);
- }
- }
- class Solution {
- public boolean isPalindrome(int x) {
- //转为字符串
- String str = String.valueOf(x);
- int l = 0, r = str.length() - 1;
- //从两边遍历过,但凡有不相等的直接返回false
- while(l < r){
- if(str.charAt(l) != str.charAt(r)){
- return false;
- }
- l++;
- r--;
- }
- //遍历结束,没出问题返回true
- return true;
- }
- }
第五题:10. 正则表达式匹配 - 力扣(LeetCode)
- class Solution {
- public boolean isMatch(String s, String p) {
- // 初始化字符串s和p的长度,加1是因为dp数组的索引从0开始
- int m = s.length() + 1, n = p.length() + 1;
-
- // 创建一个二维布尔数组dp,用于存储匹配状态
- boolean[][] dp = new boolean[m][n];
-
- // 初始化dp数组的第一行第一个元素为true,表示空字符串与空模式匹配
- dp[0][0] = true;
-
- // 初始化dp数组中模式p中包含星号(*)的情况
- // 只有当模式p中的字符是星号(*)时,我们才考虑空字符串s与模式p的匹配
- for(int j = 2; j < n; j += 2)
- dp[0][j] = dp[0][j - 2] && p.charAt(j - 1) == '*';
-
- // 遍历字符串s和模式p
- for(int i = 1; i < m; i++) {
- for(int j = 1; j < n; j++) {
- // 当模式p中的当前字符是星号(*)时
- // 有两种情况:星号(*)表示前面的元素可以出现0次或多次
- // 1. 星号(*)前面的字符没有在字符串s中匹配(即dp[i][j - 2])
- // 2. 星号(*)前面的字符在字符串s中匹配了一次(即dp[i - 1][j]),并且当前字符s.charAt(i - 1)与模式p中星号(*)前面的字符匹配,或者星号(*)前面的字符是点(.)
- dp[i][j] = p.charAt(j - 1) == '*' ?
- dp[i][j - 2] || dp[i - 1][j] && (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.') :
- // 当模式p中的当前字符不是星号(*)时
- // 需要模式p中当前字符与字符串s中的当前字符匹配,或者模式p中的当前字符是点(.)(表示匹配任何单个字符)
- // 同时,还需要之前的状态dp[i - 1][j - 1]为true(即前面的子串和模式匹配)
- dp[i - 1][j - 1] && (p.charAt(j - 1) == '.' || s.charAt(i - 1) == p.charAt(j - 1));
- }
- }
-
- // 返回dp数组的最后一个元素,即字符串s和模式p的匹配结果
- return dp[m - 1][n - 1];
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。