二维数组打印
有一个二维数组(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");
}
}
}
}
}