快乐数
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 = nfast = self.getSum(n)while show != fast:show = self.getSum(show)fast = self.getSum(self.getSum(fast))return show == 1# 获取 平方和def getSum(self, n):sum = 0while n != 0:t = n % 10sum = t * t + sumn = n / 10return 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 = 0right = len(height) - 1maxNumber = 0while left < right:maxNumber = max(min(height[left], height[right]) * (right - left), maxNumber)if height[left] < height[right]:left += 1else:right -= 1return maxNumber