算法1

 public void draw(int m, int n) {
        if (m <= 0 || n <= 0) {
            return;
        }
        StringBuilder title = new StringBuilder();
        for (int i = 0; i < m; i++) {
            title.append("*");
        }
        StringBuilder notTitle = new StringBuilder();
        notTitle.append("*");
        int blanks = m - 2;
        for (int i = 0; i < blanks; i++) {
            notTitle.append(" ");
        }
        notTitle.append("*");
        String titleStr = title.toString();
        String notTitleStr = notTitle.toString();
        System.out.println(titleStr);
        int blankLines = n - 2;
        for (int i = 0; i < blankLines; i++) {
            System.out.println(notTitleStr);
        }
        if (blankLines >= 0) {
            System.out.println(titleStr);
        }
        return;
    }
 public int checkDuplicateNum(int[] nums) {
        if (nums == null || nums.length < 2) {
            return -1;
        }
        int[] position = {-1};
        checkDuplaicateNumPartly(nums,0,nums.length-1,position);
        return position[0];
    }

    private void checkDuplaicateNumPartly(int[] nums,int beginIndex,int endIndex,int[] position){

        if(endIndex-beginIndex == nums[endIndex]-nums[beginIndex]){
            return;
        }else {
            if(beginIndex+1==endIndex){
                position[0] = beginIndex;
                return;
            }else {
                checkDuplaicateNumPartly(nums,beginIndex,(beginIndex+endIndex)/2,position);
                if(position[0]!=-1){
                    return;
                }
                checkDuplaicateNumPartly(nums,(beginIndex+endIndex)/2,endIndex,position);
            }
        }
    }
 public int checkDuplicateNumNoRecur(int[] nums) {
        if (nums == null || nums.length < 2) {
            return -1;
        }
        int beginIndex = 0;
        int endIndex = nums.length - 1;
        int mid = (beginIndex + endIndex) / 2;
        while (true) {
            if (nums[beginIndex] - nums[mid] != beginIndex - mid) {
                if (beginIndex + 1 == mid) {
                    return beginIndex;
                } else {
                    endIndex = mid;
                    mid = (beginIndex + endIndex) / 2;
                }
            } else if (nums[mid + 1] - nums[endIndex] != mid + 1 - endIndex) {
                if (mid + 2 == endIndex) {
                    return mid;
                } else {
                    beginIndex = mid + 1;
                    mid = (beginIndex + endIndex) / 2;
                }
            } else {
                return mid;
            }
        }
    }
    public String readChars(char[][] chars){
        if(chars==null ||chars.length==0){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        int beginLine = 0;
        int endLine = chars.length-1;
        int beginRaw = 0;
        int endRaw = chars[0].length -1;
        int nowLine = 0;
        int nowRaw = 0;
        int fangxiang = 0;//0:向右,1:向下,2:向左,3:向上
        boolean flag = true;
        while (flag){
            sb.append(chars[nowLine][nowRaw]);
            switch (fangxiang){
                case 0:{
                    if(nowRaw==endRaw){
                        flag=false;
                    } else if(++nowRaw==endRaw){
                        beginLine++;
                        fangxiang++;
                    }
                    break;
                }
                case 1:{
                    if(nowLine==endLine){
                        flag=false;
                    } else if(++nowLine==endLine){
                        endRaw--;
                        fangxiang++;
                    }
                    break;
                }
                case 2:{
                    if(nowRaw==beginRaw){
                        flag=false;
                    } else if(--nowRaw==beginRaw){
                        endLine--;
                        fangxiang++;
                    }
                    break;
                }
                case 3:{
                    if(nowLine==beginLine){
                        flag=false;
                    }else if(--nowLine == beginLine){
                        beginRaw++;
                        fangxiang = ++fangxiang%4;
                    }
                    break;
                }
            }
        }
        return sb.toString();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值