快乐数
202. 快乐数 - 力扣(LeetCode)
  
 
图:

 
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;
            }
        }
    }
 
盛最多水的容器
盛最多水的容器
  
 
图一:
、
图二:

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
                

![正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动](https://img-blog.csdnimg.cn/direct/0854765643514e5bac59948f6133174e.png)















![P8805 [蓝桥杯 2022 国 B] 机房](https://img-blog.csdnimg.cn/direct/b377f531555a497a9f0c96be83937da7.png)
