Leetcode每天五题II-05

  1. 快乐数

编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。

class Solution(object):
    def isHappy(self, n):
        sum = 0
        #n=sum([int(i)**2 for i in str(n)])
        while n!=1 and n!=4:
            while n:
                sum += (n%10)**2
                n/=10
            n = sum
            sum = 0
        return n==1
  1. 基本计算器 II

实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格(不含括号)。 整数除法仅保留整数部分。

class Solution {
	public static int calculate(String s) {
		int res = 0;
		int num = 0;
		char sign = '+';
		Stack<Integer> stack = new Stack<>();
		char[] sarr = s.toCharArray();
		for (int i = 0; i < sarr.length; i++) {
			if (sarr[i] >= '0') {
				num = num * 10 + sarr[i] - '0';
			}
			if ((sarr[i] < '0' && sarr[i] != ' ') || i == sarr.length - 1) {
				if (sign == '+') {
					stack.push(num);
				} else if (sign == '-') {
					stack.push(-num);
				} else if (sign == '*' || sign == '/') {
					int top = stack.pop();
					stack.push(sign == '*' ? top * num : top / num);
				}
				sign = sarr[i];
				num = 0;
			}
		}
		while (!stack.isEmpty()) {
			res += stack.pop();
		}
		return res;
	}
}
  1. 删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

344.反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

class Solution {
    public void reverseString(char[] s) {
        int len = s.length;
        for(int i = 0;i< len/2;i++){
            char c = s[i];
            s[i] = s[len - i -1];
            s[len - i -1] = c;
        }
    }
}
class Solution(object):
    def reverseString(self, a):
        for i in range(len(a)/2):
            a[i],a[-i-1] = a[-i-1],a[i]
  1. 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?

  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?

  • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

class Solution(object):
    def intersect(self, nums1, nums2):
        nums1.sort()
        nums2.sort()
        l1 = len(nums1)
        l2 = len(nums2)
        i = j = 0
        res = []
        while i<l1 and j < l2:
            if nums1[i] < nums2[j]:
                i+=1
            elif nums1[i] > nums2[j]:
                j+=1
            else:
                res.append(nums1[i])
                i+=1
                j+=1
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值