牛客练习

二维数组打印
有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。

给定一个二位数组arr及题目中的参数n,请返回结果数组。

测试样例:
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4
返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]

import java.util.*;

public class Printer {
    public int[] arrayPrint(int[][] arr, int n) {
        // write code here
        int[] ret=new int[n*n];
        int a=0;
        for(int i=n-1;i>=0;i--){
            int b=i;
            for(int j=0;j<n;j++){
                if(b<n){
                    ret[a]=arr[j][b];
                    a++;
                    b++;
                }else{
                    break;
}       //1  2  3  4       
        //5  6  7  8
        //9  10 11 12
        //13 14 15 16
            }
        }
        for(int i=1;i<n;i++){
            int b=i;
            for(int j=0;j<n;j++){
                if(b<n){
                    ret[a]=arr[b][j];
                    a++;
                    b++;
                }else{
                    break;
                }
            }
        }
        return ret;
    }
}

回文串
题目描述
给定一个字符串,问是否能通过添加一个字母将其变为回文串。
输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。
输出描述:
输出答案(YES\NO).

import java.util.Scanner;
public class Main{
public static void main(String[] args){
    Scanner input=new Scanner(System.in);
    while(input.hasNext()){
        String str=input.next();
        int count=0;
    for(int i=0;i<str.length();i++){
        if(str.length()>10){
            count++;
            System.out.println("NO");
            break;
        }
        if(str.charAt(i)<'a'||str.charAt(i)>'z'){
            count++;
            System.out.println("NO");
            break;
        }
    }
    if(count==0){
    StringBuffer str2=new StringBuffer();
    StringBuffer str3=new StringBuffer();
    String str1=new StringBuffer(str).reverse().toString();
    
    for(int i=0;i<str.length();i++){
        if(str.charAt(i)==str1.charAt(i)){
            continue;
        }
        str2=new StringBuffer(str1.substring(0,i));
        str3=new StringBuffer(str1.substring(0,i));
        str2=str2.append(String.valueOf(str1.charAt(i))).append(str.substring(i,str.length()));
        str3=str3.append(String.valueOf(str.charAt(i))).append(str1.substring(i,str1.length()));
        break;
    }
    if(str2.toString().equals(str2.reverse().toString())){
        System.out.println("YES");
    }else if(str3.toString().equals(str3.reverse().toString())){
        System.out.println("YES");
    }else{
        System.out.println("NO");
    }
}
    }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值