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 ;
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();
}