有一个二进制数的字符串,想把字符串循环右移k位,然后得到一个新的二进制数,求这个数的十进制值是多少。给定一个二进制字符串str和循环位移位数k,返回循环后的二进制数的十进制值。
import java.util.*; public class Solution { /** * 位移后二进制串的十进制值 * @param str string字符串 二进制字符串 * @param k int整型 循环位移次数 * @return long长整型 */ public long rotateRight(String str, int k) { // write code here if (k > str.length()) { k = k % str.length(); } String head = str.substring(str.length() - k); String tail = str.substring(0, str.length() - k); str = head + tail; return Long.parseLong(str, 2); } }
public long rotateRight (String str, int k) { StringBuilder sb = new StringBuilder(str); int len = str.length(); for (int i = 0; i < k; i++) { char end = sb.charAt(len - 1); sb.insert(0, end); sb.deleteCharAt(sb.length() - 1); } String res = sb.toString(); len = res.length(); BigDecimal total = new BigDecimal("0"); for (int i = 0; i < len; i++) { total = total.add(new BigDecimal(Integer.parseInt(String.valueOf(res.charAt(i))) * Math.pow(2, len - 1 - i) + "")); } return total.longValue(); }
public long rotateRight (String str, int k) { // write code here StringBuffer s=new StringBuffer(str); for(int i=0;i<k;i++){ char s1=s.charAt(str.length()-1); s.deleteCharAt(str.length()-1); s.insert(0,s1); } long z=0; int j=0; while(s.length()>0){ int zzz=s.charAt(s.length()-1)-'0'; long zz=(long)Math.pow(2,j)*zzz; z+=zz; j++; s.deleteCharAt(s.length()-1); } return z; }
long long rotateRight(string str, int k) { // write code here int size=str.size(); k=k%size; string cpy; for(int i=size-k;i<size;++i){ cpy+=str[i]; } for(int i=0;i<size-k;++i){ cpy+=str[i]; } long long x=1; long long num=0; for(int i=size-1;i>=0;--i){ num+=(cpy[i]-'0')*x; x*=2; } return num; } 贡献一个C++版本的
class Solution: def rotateRight(self, str, k): str = str[len(str)-k:len(str)]+str[0:len(str)-k] return int(str, 2)