分析:
- 题目有三个关键点:
- 一:结束时,回到起始位置(比较结束时和起始时的下标位置是否相同)
- 二:该整数的所有数字都必须遍历一遍,且只能遍历一遍(把遍历过的数字做个标记)
- 三:要走的步数超出整数的长度时,应该选择取余绕回整数的最左,而不是作减法,因为作减法后可能仍然超出整数长度
package no1_1;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String s=reader.readLine();
int len=s.length();
int[] n=new int[len];
for(int i=0;i<len;i++) {
n[i]=(int)s.charAt(i)-48;//0的ASCII码为48
}
int index=0;
int times=len;
String result="yes";
while(times-->0) {
int temp=n[index];
n[index]=0;//遍历过的数字都标记为0
if(index+temp>=len) {//当前下标加上行走的步数超出了数组长度,绕回数组最左边
index=(index+temp)%len;
}else {
index=index+temp;
}
}
//两重检查
if(index!=0) {//没有回到开头的位置
result="no";
}else {//某个数字没有遍历到
for(int i=len-1;i>=0;i--) {
if(n[i]!=0) {
result="no";
break;
}
}
}
System.out.println(result);
}
}