【LeetCode每日一题】633. 平方数之和

今天已经坚持Day33+天了。

题目:

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。

示例 1:

输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

示例 2:

输入:c = 3
输出:false

预处理+查询

如果存在符合条件的a,b,那么a和b一定在1和sqrt(c)之间。

class Solution {
public:
    typedef unsigned long long ULL;
    bool judgeSquareSum(int c) {
        if (c == 0) return true;
        unordered_map<ULL, ULL> um;
        for (int i = 1; i <= sqrt(c); i++) {
            um[i*i]++;
        }

        for (int i = 1; i <= sqrt(c); i++) {
            if (i*i == c || um.count(c - i*i)) return true;
        }
        return false;
    }
};

双指针

class Solution {
public:
    bool judgeSquareSum(int c) {
        int j = sqrt(c);
        int i = 0;
        while (i <= j) {
            if (i*i > c - j*j) {
                j--;
            } else if (i*i < c - j*j) {
                i++;
            } else {
                return true;
            }
        }
        return false;
    }
};

本节完~

往日每日一题:

【LeetCode每日一题】83. 删除排序链表中的重复元素

【LeetCode每日一题】61. 旋转链表

【LeetCode每日一题】173. 二叉搜索树迭代器

【LeetCode每日一题】190. 颠倒二进制位

【LeetCode每日一题】74. 搜索二维矩阵

像树一样简单回溯递归【LeetCode每日一题】90. 子集 II

4月你好,愚人节果然是笨人,【LeetCode每日一题】1006. 笨阶乘

【LeetCode每日一题】面试题 17.21. 直方图的水量

不知不觉已经坚持8天了,你呢?【LeetCode每日一题】1143. 最长公共子序列

Day10【LeetCode每日一题】781. 森林中的兔子