给定两个字符串 *s*
和 *t*
,编写一个函数来判断 *t*
是否是 *s*
的字母异位词,小写字母组成。
class Solution {
public boolean isAnagram(String s, String t) {
if(t.length() != s.length()) return false;
int[] w = new int[26];
for(int i = 0 ;i<s.length() ; i++){
char c = s.charAt(i);
w[c - 'a']++;
}
for(int i = 0 ;i<t.length(); i++){
char c = t.charAt(i);
w[c - 'a']--;
}
for(int i : w){
if(i != 0 ) return false ;
}
return true ;
}
}
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> res = new HashSet<>();
Set<Integer> sets = new HashSet<Integer>();
for (int i = 0; i < nums1.length; i++) {
sets.add(nums1[i]);
}
for (int i = 0; i < nums2.length; i++) {
if(sets.contains(nums2[i])){
res.add(nums2[i]);
}
}
return res.stream().mapToInt(Integer::valueOf).toArray();
}
}
编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
如果 n
是 快乐数 就返回 true
;不是,则返回 false
示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
输入:n = 2
输出:false
n%10 下次n=n/10-->n==0
即可class Solution {
Set<Integer> sets = new HashSet<>();
public boolean isHappy(int n) {
int sum = 0 ;
while(n>0) {
int t = n % 10;
sum += t*t;
n = n/10;
}
if(sum == 1){
return true;
}else if(sets.contains(sum)){
return false;
}else{
sets.add(sum);
}
return isHappy(sum) ;
}
}
class Solution {
public boolean isHappy(int n) {
Set<Integer> s = new HashSet<>();
int sum = 0 ;
while(n != 0){
//个位的平方和
sum += (n%10) * (n%10) ;
n = n/10 ;
if(n == 0){
if(s.contains(sum)){
//第二次出现时一定会无限循环下去
return false;
}else if (sum == 1){
return true;
}else{
s.add(sum);
n = sum;
sum =0 ;
}
}
}
return true;
}
}
class Solution {
public boolean isHappy(int n) {
int slow = n , fast = squareSum(n);
while(slow != fast){
slow = squareSum(slow);
fast = squareSum(squareSum(fast));
}
return slow == 1 ;
}
public int squareSum(int n ){
int sum = 0 ;
while(n>0) {
int t = n % 10;
sum += t*t;
n = n/10;
}
return sum ;
}
}
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
class Solution {
public int[] twoSum(int[] nums, int target) {
//map value:下标, key:存放目标值和每次遍历元素的差值
Map<Integer,Integer> s = new HashMap<Integer,Integer>();
for (int i = 0; i < nums.length; i++) {
if(s.containsKey(nums[i])){
return new int[]{s.get(nums[i]),i};
}else{
s.put(target - nums[i],i);
}
}
return null ;
}
}