初级算法(三)

初级算法(三)

1、引言

1、有效的数独:要求数字1-9在每一行只能出现一次,数字1-9在每一列只能出现一次。数字1-9在每一个小九格中只能出现一次
2、旋转图像:将一个二维矩阵,将图像顺时针旋转90度
3、反转字符串:将一个字符数组,反转数字

2、有效的数独

​ 这一波主要是利用Java中set集合中不能存在重复元素。

 	//使用hashset数据结构,去重
    //执行用时:3ms,内存消耗:41.7MB
    public boolean isValidSudoku(char[][] board) {
        for (int i = 0; i < 9; i++) {
            HashSet setLine=new HashSet();
            HashSet setCol=new HashSet();
            HashSet setBox=new HashSet();
            for (int j = 0; j < 9; j++) {
                if(board[i][j]!='.'&&!setLine.add(board[i][j]))
                    return false;
                if(board[j][i]!='.'&&!setCol.add(board[j][i]))
                    return false;
               int a=(i/3)*3+j/3;
               int b=(i%3)*3+j%3;
               if(board[a][b]!='.'&&!setBox.add(board[a][b]))
                   return false;
            }
        }
        return true;
    }

3、旋转图像

//找规律,先上下交换,再对角线交换
    //执行用时:0ms,内存消耗:40MB
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        if(n==1)
            return;
        for (int i = 0; i < n/2; i++) {
            int[] temp=matrix[i];
            matrix[i] =matrix[n-1-i];
            matrix[n-i-1]=temp;
        }
        //对角线交换
        for (int i = 0; i < n; i++) {
            for (int j = i+1; j < n; j++) {
                int temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
    }

3、反转字符串

方法一:双指针。方法二:循环

 	//方法一:双指针
    //执行用时:0ms,内存消耗47.9MB
    public void reverseString(char[] s) {
        if(s.length==1)
            return;
        int i=0,j=s.length-1;
        while(i<j){
            char temp=s[i];
            s[i]=s[j];
            s[j]=temp;
            i++;
            j--;
        }
    }
	//方法二:使用for循环,两两交换
    //执行用时:0ms,内存消耗:48.3MB
    public void reverseString2(char[] s) {
        if (s.length == 1)
            return;
        for (int i = 0; i < s.length / 2; i++) {
            char temp = s[i];
            s[i] = s[s.length - 1 - i];
            s[s.length - 1 - i] = temp;
        }
    }	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值