2021-07-30算法题

111 阅读1分钟
  1. 字符串相加

image.png 思路:使用双指针分别从两个字符串的尾部向前遍历,如果其中一个指针小于零,则该位数字当0看待即可

class Solution {
    public String addStrings(String num1, String num2) {
        int jinwei = 0;
        StringBuffer s = new StringBuffer();
        int i = num1.length() - 1, j = num2.length() - 1;
        while (i >= 0 || j >= 0) {
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(j) - '0' : 0;
            s.append((x + y + jinwei) % 10);
            jinwei = (x + y + jinwei) / 10;
            i--;
            j--;
        }
        if (jinwei != 0) {
            s.append(jinwei);
        }
        return s.reverse().toString();
    }
}
  1. 字符串中的单词数

image.png 思路:用trim去掉首尾空格,然split分割

class Solution {
    public int countSegments(String s) {
        String t = s.trim();
        if (t.equals("")) {
            return 0;
        }
        return t.split("\\s+").length;
    }
}
  1. 排列硬币

image.png 思路:循环相加然后进行判断即可,注意sum为long防止溢出

class Solution {
    public int arrangeCoins(int n) {
        long sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
            if (sum == n) {
                return i;
            } else if (sum > n) {
                return i - 1;
            }
        }
        return 0;
    }
}