Day 22
题目描述
思路
题目要求原地完成更新,那么就存在问题,假如一个元素更新时,它周围的八个元素中存在从活到死或者从死到活的更新,就很导致该元素的更新错误,于是根据分析题目的四种更新策略,可以这么定于:
活->死 用3来表示
活->活 用1表示
死->活 用4来表示
死->死 用0来表示
在判断某元素更新时,如果周围元素为1或者为3都说明这个元素是活的,如果周围元素不存在或者为0,4说明这个元素是死的。最后整体更新,将数组中的3变为1,4变为0即可
class Solution {
public void gameOfLife(int[][] board) {
//设定新的状态值
//活变死为3
//死变活为4
int sum=0;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
sum=0;//统计周边八个活细胞的数量
if(i-1>=0){
if(board[i-1][j]==1||board[i-1][j]==3){
sum++;
}
if(j-1>=0&&(board[i-1][j-1]==1||board[i-1][j-1]==3)){
sum++;
}
if(j+1<board[i].length&&(board[i-1][j+1]==1||board[i-1][j+1]==3)){
sum++;
}
}
if(j-1>=0&&(board[i][j-1]==1||board[i][j-1]==3)){
sum++;
}
if(j+1<board[i].length&&(board[i][j+1]==1||board[i][j+1]==1)){
sum++;
}
if(i+1<board.length){
if(j-1>=0&&(board[i+1][j-1]==1||board[i+1][j-1]==3)){
sum++;
}
if(j+1<board[i].length&&(board[i+1][j+1]==1||board[i+1][j+1]==3)){
sum++;
}
if (board[i+1][j]==1||board[i+1][j]==3){
sum++;
}
}
if(board[i][j]==1){//该细胞为活
if(sum<2||sum>3){//活-》死的条件
board[i][j]=3;
}
}
else{
if(sum==3){//死-》活的条件
board[i][j]=4;
}
}
}
}
for (int i = 0; i < board.length; i++) {//整体更新
for (int j = 0; j < board[i].length; j++) {
if(board[i][j]==3){
board[i][j]=0;
}
if(board[i][j]==4){
board[i][j]=1;
}
}
}
}
}
题目描述
思路
直接将magazine中的字符依次存放到hashmap中,记录该字符的数量,依次判断ransomNote中的字符在hashmap中时候存在:
存在,判断数量是否大于等于1,大于等于1 则hashmap中数值减1,否则返回false
不存在返回false
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character, Integer> mag = new HashMap<>();
for (int i = 0; i < magazine.length(); i++) {
if(mag.containsKey(magazine.charAt(i))){
mag.put(magazine.charAt(i), mag.get(magazine.charAt(i)) + 1);
}
else{
mag.put(magazine.charAt(i), 1);
}
}
for (int i = 0; i < ransomNote.length(); i++) {
if(mag.containsKey(ransomNote.charAt(i))){
if(mag.get(ransomNote.charAt(i))>=1){
mag.put(ransomNote.charAt(i), mag.get(ransomNote.charAt(i))-1);
}
else{
return false;
}
}
else{
return false;
}
}
return true;
}
}