力扣刷题 day2

admin2024-05-15  0

快乐数

202. 快乐数 - 力扣(LeetCode)

力扣刷题 day2,在这里插入图片描述,第1张

图:

力扣刷题 day2,在这里插入图片描述,第2张
力扣刷题 day2,在这里插入图片描述,第3张

java

  // 快乐数 --> 19 => 1^2 + 9 ^2 = 82 => 82 => 8 ^ 2 + 2 ^ 2  ......
    public boolean isHappy(int n) {
        // 使用快慢指针
        int slow = n, fast = getSum(n);
        while (slow != fast) {
            slow = getSum(slow);
            fast = getSum(getSum(fast));
        }
        return slow == 1;
    }

    // 返回 n 这个数每一位的平方和
    public int getSum(int n) {
        int sum = 0;
        while (n != 0) {
            // 获取导最后一位
            int t = n % 10;
            // 相当于 每个位子 n 平方
            sum += t * t;
            n /= 10;
        }
        return sum;
    }

python:

class Solution(object):
    def isHappy(self, n):
        show = n
        fast = self.getSum(n)
        while show != fast:
            show = self.getSum(show)
            fast = self.getSum(self.getSum(fast))
        return show == 1

    # 获取 平方和
    def getSum(self, n):
        sum = 0
        while n != 0:
            t = n % 10
            sum = t * t + sum
            n = n / 10
        return sum

这里还有一个取巧的方法,本体难点就是不是 快乐数的进行平方运算会出现循环的情况吗 ,那么我们使用一个 计数器 ,记录下每次平方的次数,然后规定一个值,只要计数器等于这个值后 ,就直接返回 false , 说明不是 快乐数

 public boolean isHappy(int n) {
        int count = 0;
        int ret = 0;
        while (true) {
            int a = n % 10;
            n /= 10;
            // 相当于 平方操作
            count += a * a;
            if (n == 0) {
                //此时说明是快乐数
                if (count == 1) {
                    return true;
                } else {
                    // 此时不是快乐数对计数器进行++
                    ret++;
                    // 对非快乐书 再次进行规则运算
                    n = count;
                    count = 0;
                }
            }
            // 此时 给 一个指定值 表示结束情况
            if (ret == 10) {
                // 此时 10 次,差不多就可以校验出当前这个数是否为快乐数了
                return false;
            }
        }
    }

盛最多水的容器

盛最多水的容器

力扣刷题 day2,在这里插入图片描述,第4张

图一:

力扣刷题 day2,在这里插入图片描述,第5张

图二:

力扣刷题 day2,在这里插入图片描述,第6张

java:

 // 单调性+双指针
    public static int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxCubage = 0;
        while (left != right) {
            int nowWidth = right - left;
            // 取最小值
            if (height[left] < height[right]) {
                maxCubage = Math.max(height[left] * nowWidth, maxCubage);
                left++;
            } else {
                maxCubage = Math.max(height[right] * nowWidth, maxCubage);
                right--;
            }
        }
        return maxCubage;
    }

python:

class Solution(object):
    def maxArea(self, height):
        left = 0
        right = len(height) - 1
        maxNumber = 0
        while left < right:
            maxNumber = max(min(height[left], height[right]) * (right - left), maxNumber)
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        return maxNumber
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!