编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 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
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格(不含括号)。 整数除法仅保留整数部分。
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;
}
}
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
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:
输入: 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