第一遍
class Solution {
public boolean isAnagram ( String s, String t) {
int [ ] checkListi = new int [ 256 ] ;
int [ ] checkListj = new int [ 256 ] ;
for ( int i = 0 ; i < s. length ( ) ; i++ ) {
char checkChar = s. charAt ( i) ;
int i_ascii = checkChar - '0' ;
checkListi[ i_ascii] += 1 ;
}
for ( int j = 0 ; j < t. length ( ) ; j++ ) {
char checkChar = t. charAt ( j) ;
int j_ascii = checkChar - '0' ;
checkListj[ j_ascii] += 1 ;
}
return Arrays . equals ( checkListi, checkListj) ;
}
}
学习set:看到了一篇大佬的文章讲set相关知识的,很厉害。 学习set转数组:set如何转换为数组
第一遍
思考
题目不难,但重点是掌握和了解set相关的知识,包括list、Hashset、treeset
class Solution {
public int [ ] intersection ( int [ ] nums1, int [ ] nums2) {
Set < Integer > set1 = new HashSet < > ( ) ;
Set < Integer > set2 = new HashSet < > ( ) ;
for ( int i : nums1) {
set1. add ( i) ;
}
for ( int i : nums2) {
if ( set1. contains ( i) ) {
set2. add ( i) ;
}
}
return set2. stream ( ) . mapToInt ( Integer :: intValue ) . toArray ( ) ;
}
}
第一遍
思考
题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!(这一步如果能想出来,才是真的理解题目的,但是我好像是误打误撞了,只是惯性思维觉得应该用set判断是否有重复出现,没有真正读懂题意) 题目的重点 还是看到是否有出现过,要学会使用set 难点:如何取出每一位的数值;这一步想了一下,没有过多思考,答案应该有很简单的方法,就直接看了,自己想了5mins没有很好的办法;
class Solution {
public boolean isHappy ( int n) {
Set < Integer > set1 = new HashSet < > ( ) ;
boolean flag = true ;
while ( flag) {
n = sum ( n) ;
if ( n == 1 ) {
return flag;
}
flag = set1. add ( n) ;
}
return flag;
}
public int sum ( int n) {
int result = 0 ;
while ( n > 0 ) {
int mod = n % 10 ;
result += mod * mod;
n /= 10 ;
}
return result;
}
}
第一遍
思考
根据建议,先看了题解,了解到了本题应该使用的思路,了解了一下java相关的map的用法,一遍AC了。 下面两张图片我感觉是我理解题目的中重点,大家可以好好品一品
package HashStructure ;
import java. util. * ;
public class HashTest {
public static void main ( String [ ] args) {
int [ ] nums1 = { 2 , 7 , 11 , 15 } ;
int target = 9 ;
Solution solution = new Solution ( ) ;
int [ ] result = solution. twoSum ( nums1, target) ;
System . out. println ( Arrays . toString ( result) ) ;
}
}
class Solution {
public int [ ] twoSum ( int [ ] nums, int target) {
Map < Integer , Integer > map1 = new HashMap < > ( ) ;
for ( int i = 0 ; i < nums. length; i++ ) {
int findValue = target - nums[ i] ;
if ( map1. containsKey ( findValue) ) {
return new int [ ] { i, map1. get ( findValue) } ;
} else {
map1. put ( nums[ i] , i) ;
}
}
return new int [ ] { } ;
}
}